来自 CAS 的 LDAP 用户属性

Posted

技术标签:

【中文标题】来自 CAS 的 LDAP 用户属性【英文标题】:LDAP user attributes from CAS 【发布时间】:2015-08-23 21:44:03 【问题描述】:

您好,我在我的应用程序(春季应用程序)中使用 CAS 进行单点登录。 我能够使用 CAS 登录,我只获取用户名,但没有从 CAS 获取电子邮件或任何其他属性。

对于 CAS 端的身份验证,我使用 LDAP 并在下面的 deployerConfigContext.xml 中配置是代码

在 authenticationManager 中添加以下代码

<property name="credentialsToPrincipalResolvers">
<list>
     <bean class="org.jasig.cas.authentication.principal.CredentialsToLDAPAttributePrincipalResolver">
            <property name="credentialsToPrincipalResolver">
                <bean
                    class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" />
            </property>
            <property name="filter" value="sAMAccountName=%u" />
            <property name="principalAttributeName" value="sAMAccountName" />
            <property name="searchBase" value="DC=test,DC=com" />
            <property name="contextSource" ref="LDAPcontextSource" />
            <property name="attributeRepository">
                <ref bean="attributeRepository" />
            </property>
        </bean>
</list>
</property>

并使用了 LdapPersonAttributeDao

 <bean id="attributeRepository"
        class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao">
        <property name="baseDN" value="cn=test,ou=test,dc=test,dc=com" />
        <property name="contextSource" ref="LDAPcontextSource" />
        <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" />
                <entry key="mail" value="email" />
            </map>
        </property>
    </bean>

我看了一些帖子,发现在下面的配置中添加allowedAttributes属性就是配置

    <bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
        <property name="registeredServices">
            <list>
                <bean class="org.jasig.cas.services.RegisteredServiceImpl">
    <property name="id" value="0" />
    <property name="name" value="HTTP" />
    <property name="description" value="Only Allows HTTP Urls" />
    <property name="serviceId" value="http://**" />
    <property name="allowedAttributes">
        <list>
            <value>cn</value>
            <value>mail</value>
        </list>
    </property>
</bean>

在我的应用程序方面,我编写了获取用户名和电子邮件的类,下面是代码

    public class RestAuthenticationUserDetailsService implements AuthenticationUserDetailsService<CasAssertionAuthenticationToken> 

    @Override
    public UserDetails loadUserDetails(CasAssertionAuthenticationToken token)
            throws UsernameNotFoundException 
        Object principal = token.getPrincipal();
        String username = token.getName();
        LOGGER.info(username);

        Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
        return new User(username, "", authorities);
    


我获得了用户名,但没有获得电子邮件等其他属性。当我调试时,我看到主要属性是空的。

有人可以帮助我了解如何为我的应用程序获取属性 提前致谢。

【问题讨论】:

【参考方案1】:

我在 deployerConfigContext.xml 的配置中看到。 1. 中,key为LDAP入口属性,value为Principal的(value) 2. 在 中,您应该允许 Principal 中的值(例如 displayName & mail)

希望对你有帮助,加油!

【讨论】:

以上是关于来自 CAS 的 LDAP 用户属性的主要内容,如果未能解决你的问题,请参考以下文章

CAS 身份验证后在 JSF 托管 Bean 中获取 LDAP 属性

LDAP 与 MYSQL .. JA-SIG CAS 与 LDAP 与 CAS 与 MySQL

Spring Security LDAP VS CAS VS OpenID 的区别

DataEase 集成 CAS 实现用户单点登录

使用ldap列出来自用户的组

cas单点登录怎么在服务器端获得用户信息