我现在已经将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
:Populate Principal's attributes with LDAP repository
在第Bean property 'ldapAttributesToPortalAttributes' is not writable or has an invalid setter method.
章中。结果是CAS没有启动,而是给我留言
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}}
答案 0 :(得分:3)
我有以下bean
<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>