Единый вход в систему (SSO): как использовать Active Directory в качестве метода аутентификации для службы CAS?

Я разрабатываю портал для Liferay и хочу применить там механизм единого входа (SSO). Я использую Jasig CAS для централизованной аутентификации нескольких моих веб-приложений. До сих пор я знаю, что могу использовать CAS в качестве метода проверки подлинности, но следующим шагом будет добавление дополнительных сведений и запрос проверки подлинности с сервера Active Directory.

Это должно быть возможно при использовании AD в качестве «базы данных», для которой выполняется аутентификация, но я новичок в этих вещах и не знаю, как это сделать с помощью Jasig CAS.

Есть какие-нибудь подсказки, как выполнить эту задачу?


person mico    schedule 20.06.2011    source источник


Ответы (1)


Я делаю здесь несколько предположений, поэтому, пожалуйста, дайте мне знать, если я ошибаюсь:

  1. Вы используете версию CAS от 3.3.2 до 3.4.8.
  2. Вы хотите связать CAS с Active Directory через LDAP (для Kerberos или SPNEGO см. Ссылки ниже) с помощью Bind LDAP Handler (для FastBind см. Ссылки ниже).
  3. Вы знакомы с созданием CAS из исходного кода через Maven.

Предпосылка

  • Если вы собираетесь подключиться к AD через «ldaps: //» (в отличие от «ldap: //»), JVM на вашем сервере CAS должна доверять сертификату SSL вашего сервера Active Directory. Если вы используете самозаверяющий сертификат для AD, вам необходимо импортировать его в хранилище доверенных сертификатов JVM.

Резюме

В исходном дереве CAS вам необходимо внести изменения в следующие файлы:

  • cas-server-webapp / pom.xml
  • cas-server-webapp / SRC / основной / webapp / WEB-INF / deployerConfigContext.xml

Подробности

pom.xml:

Добавьте в <dependencies> следующее:

<!-- LDAP support -->
<dependency>
    <groupId>${project.groupId}</groupId>
    <artifactId>cas-server-support-ldap</artifactId>
    <version>${project.version}</version>
</dependency>

deployerConfigContext.xml:

  1. Перенастройте свои устройства аутентификации:

    • Look for: <property name="authenticationHandlers">. Inside this is a <list>, and inside this are (probably) two <bean ...> elements
    • Оставьте это:

      <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.

  2. Создайте источник контекста для 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» и «пароль» соответственно.

Перестройте cas-server-webapp и попробуйте.

Использованная литература:

person John King    schedule 22.06.2011
comment
+1: Отличный ответ! Когда у меня будет время написать код, я проверю, как это работает. Тысяча благодарностей! - person mico; 22.06.2011
comment
Небольшой вопрос: активный каталог использует протокол LDAP? - person John John Pichler; 13.10.2015
comment
Правильно - stackoverflow.com/questions/663402/ - person John King; 14.10.2015