Получить атрибуты пользователя LDAP из CAS
У меня есть некоторые проблемы с CAS в сочетании с LDAP сейчас. Я хочу реализовать решение SSO для нескольких приложений. Аутентификация отлично работает до сих пор. Мы хотим авторизовать пользователей на основе их ролей, настроенных в LDAP. Проблема в том, что CAS не доставляет роли пользователей.
Я так далеко, что знаю, что deployerConfigContext.xml
должен быть настроен. Я также нашел различные учебные пособия, большинство из которых работают с неверной версией CAS или не выполняют то, что я хочу.
Наши пользователи лежат в cn=admin,cn=users,dc=manager,dc=local
группы проживают в cn=admins,ou=groups,dc=manager,dc=local
, Версия CAS 3.5.2
Я попытался вставить что-то вроде этого:
<bean id="attributeRepository" class="org.jasig.services.persondir.support.StubPersonAttributeDao">
<property name="backingMap">
<map>
<entry key="uid" value="uid" />
<entry key="eduPersonAffiliation" value="eduPersonAffiliation" />
<entry key="groupMembership" value="groupMembership" />
</map>
</property>
<property name="query" value="(uid={0})" />
<property name="contextSource" ref="contextSource" />
<property name="ldapAttributesToPortalAttributes">
<map>
<entry key="cn" value="Name" />
<entry key="home" value="homeDirectory" />
</map>
</property>
</bean>
CAS сказал мне, что ему не нравятся свойства query
, contextSource
а также ldapAttributesToPortalAttributes
, Я хотел получить "простой" атрибут homeDirectory.
Кто-нибудь из вас может дать мне совет, как настроить этот злой xml-файл? Если вы хотите, я также могу предоставить полный XML-файл.
ОБНОВИТЬ
После некоторых попыток я попытался настроить attributeRepository
как на этом сайте: https://wiki.jasig.org/display/CASUM/Attributes в главе Populate Principal's attributes with LDAP repository
, В результате CAS не запускается, а дает мне сообщение
Bean property 'ldapAttributesToPortalAttributes' is not writable or has an invalid setter method.
мой attributeRepository
выглядит так:
<bean id="attributeRepository" class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao">
<property name="ldapAttributesToPortalAttributes">
<map>
<entry key="cn" value="Name" />
<entry key="home" value="homeDirectory" />
</map>
</property>
</bean>
1 ответ
У меня есть следующий боб
<bean id="attributeRepository"
class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao">
<property name="baseDN" value="ou=groups,dc=manager,dc=local"/>
<property name="contextSource" ref="contextSource" />
<property name="requireAllQueryAttributes" value="true"/>
<property name="queryAttributeMapping">
<map>
<entry key="username" value="sAMAccountName" />
</map>
</property>
<property name="resultAttributeMapping">
<map>
<entry key="displayName" value="cn" />
</map>
</property>
</bean>
Где вы отображаете атрибут displayName как cn. Строки ниже в вашем deployerConfigContext.xml вы найдете allowAttributes, если его не существует, вы можете добавить. Используя это, вы загрузите эту информацию в сессии.
<bean
id="serviceRegistryDao"
class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
<property name="registeredServices">
<list>
<bean class="org.jasig.cas.services.RegexRegisteredService">
<property name="id" value="0" />
<property name="name" value="HTTP and IMAP" />
<property name="description" value="Allows HTTP(S) and IMAP(S) protocols" />
<property name="serviceId" value="^(https?|imaps?)://.*" />
<property name="evaluationOrder" value="10000001" />
<property name="allowedAttributes">
<list>
<value>cn</value>
</list>
</property>
</bean>
</list>
</property>
</bean>
Чтобы вернуть эти значения из CAS, измените casServiceValidationSuccess.jsp (находится по адресу WEB-INF/view/jsp/protocol/2.0)
<cas:attributes>
<c:forEach var="auth" items="${assertion.chainedAuthentications}">
<c:forEach var="attr" items="${auth.principal.attributes}" >
<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)} </cas:${fn:escapeXml(attr.key)}>
</c:forEach>
</c:forEach>
</cas:attributes>