Получить атрибуты пользователя 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>
Другие вопросы по тегам