Я делаю несколько предположений здесь, поэтому, пожалуйста, дайте мне знать, если я не намечен:
- Вы используете версию CAS между 3.3.2 и 3.4.8.
- Вы хотите привязать CAS к Active Directory через LDAP (для Kerberos или SPNEGO см. Ссылки ниже) с помощью обработчика Bind LDAP (для FastBind см. Ссылки ниже).
- Вы знакомы с созданием CAS из источника через Maven.
Предпосылка
- Если вы собираетесь связываться с AD через «ldaps: //» (в отличие от «ldap: //»), JVM на вашем сервере CAS должен доверять SSL-сертификату вашего сервера Active Directory. Если вы используете самоподписанный сертификат для AD, вам необходимо импортировать его в хранилище доверенных сертификатов JVM.
Резюме
В вашем исходном дереве CAS вам необходимо внести изменения в следующие файлы:
- КАС-сервер WebApp / pom.xml
Подробнее
pom.xml:
Добавьте следующее в <dependencies>
:
<!-- LDAP support -->
<dependency>
<groupId>${project.groupId}</groupId>
<artifactId>cas-server-support-ldap</artifactId>
<version>${project.version}</version>
</dependency>
deployerConfigContext.xml:
Переконфигурируйте ваши держатели аутентификации:
- Ищите:
<property name="authenticationHandlers">
. Внутри это <list>
, а внутри (вероятно) два <bean ...>
элемента
Оставьте это:
<bean class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler" p:httpClient-ref="httpClient" />
Другой <bean>
(опять же, вероятно) соответствует текущему методу аутентификации, который вы используете. (Я не ясно, исходя из вопроса, так как есть несколько способов
CAS может сделать это без использования внешних сервисов. По умолчанию используется значение SimpleTestUsernamePasswordAuthenticationHandler, оно аутентифицируется, если имя пользователя равно паролю). Замените это <bean>
на:
<!-- LDAP bind Authentication Handler -->
<bean class="org.jasig.cas.adaptors.ldap.BindLdapAuthenticationHandler">
<property name="filter" value="uid=%u" />
<property name="searchBase" value="{your LDAP search path, e.g.: cn=users,dc=example,dc=com}" />
<property name="contextSource" ref="LDAPcontextSource" />
<property name="ignorePartialResultException" value="yes" /> <!-- fix because of how AD returns results -->
</bean>
Измените свойство searchBase в соответствии с вашей конфигурацией AD.
Создание источника контекста для LDAP:
Добавьте это где-нибудь внутри корневого элемента <beans>
:
<bean id="LDAPcontextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="pooled" value="false"/>
<property name="urls">
<list>
<value>{URL of your AD server, e.g.: ldaps://ad.example.com}/</value>
</list>
</property>
<property name="userDn" value="{your account that has permission to bind to AD, e.g.: uid=someuser, dc=example, dc=com}"/>
<property name="password" value="{your password for bind}"/>
<property name="baseEnvironmentProperties">
<map>
<entry>
<key>
<value>java.naming.security.authentication</value>
</key>
<value>simple</value>
</entry>
</map>
</property>
</bean>
Измените "urls", "userDn" и "password" соответственно.
Перестройте cas-server-webapp и попробуйте.
Ссылки