0

我现在在将 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 告诉我他不喜欢这些属性querycontextSource并且ldapAttributesToPortalAttributes。我想获取“简单”属性 homeDirectory。

你们中的任何人都可以给我一些关于如何配置那个邪恶的 xml 文件的提示吗?如果您愿意,我还可以提供完整的 xml 文件。

更新

经过一番摆弄,我尝试attributeRepository在此站点上配置 as:https ://wiki.jasig.org/display/CASUM/Attributes in chapter 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>
4

1 回答 1

3

我有以下豆

<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 下面的行你会发现allowedAttributes,如果它不存在你可以添加。使用它,您将在会话中加载该信息。

<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>
于 2013-12-24T14:40:20.303 回答