CAS APEREO SSO IDP 5.3.X SAML响应属性缺失问题求助
解决方案:无需禁用SSO/Kerberos获取完整属性
1. 强制Kerberos认证后重新加载用户属性
在CAS的cas.properties中配置强制属性刷新参数,确保Kerberos认证完成后,CAS主动从AD拉取完整用户属性,而非复用缓存的会话数据:
# 强制每次认证请求时重新加载用户属性 cas.authn.attributeRepository.refreshEnabled=true cas.authn.attributeRepository.refreshInterval=0
同时检查AD属性源配置(如ldap-attribute-repository.xml),确保属性映射正确且无不必要缓存:
<bean id="adAttributeRepository" class="org.apereo.cas.authentication.LdapAttributeRepository"> <property name="ldapTemplate" ref="ldapTemplate"/> <property name="baseDn" value="dc=example,dc=com"/> <property name="userFilter" value="(sAMAccountName={0})"/> <property name="attributes"> <map> <entry key="email" value="mail"/> <entry key="memberOf" value="memberOf"/> <entry key="username" value="sAMAccountName"/> </map> </property> <!-- 禁用属性缓存 --> <property name="cache" ref="noOpCache"/> </bean> <bean id="noOpCache" class="org.apereo.cas.util.cache.NoOpCacheManager"/>
2. 调整SPNEGO认证的会话属性传递
修改cas.authn.spnego相关配置,确保SPNEGO认证成功后将完整属性注入会话:
# 指定SPNEGO认证使用的用户标识属性 cas.authn.spnego.principal.attributeId=sAMAccountName # 启用SPNEGO认证后的属性仓库加载 cas.authn.spnego.attributeRepository.enabled=true # 关联已配置的AD属性仓库 cas.authn.spnego.attributeRepository.id=adAttributeRepository
3. 检查SAML2服务的属性释放策略
确认SAML2服务注册配置(如cas-saml2.xml或服务元数据)中,明确释放所需属性,且无首次认证限制:
<bean id="samlRegisteredService" class="org.apereo.cas.support.saml.services.SamlRegisteredService"> <property name="clientId" value="https://sp.example.com/saml"/> <property name="name" value="Example SP"/> <property name="id" value="1"/> <property name="metadataLocation" value="classpath:metadata/sp-metadata.xml"/> <property name="attributeReleasePolicy"> <!-- 释放全部属性,或指定需要的属性列表 --> <bean class="org.apereo.cas.services.ReturnAllAttributeReleasePolicy"/> </property> </bean>
同时修正NameID配置,确保CAS从AD属性中正确获取邮箱作为NameID:
<bean id="samlNameIdGenerator" class="org.apereo.cas.support.saml.authentication.principal.Saml2NameIdGenerator"> <property name="nameIdFormat" value="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"/> <property name="attribute" value="email"/> </bean>
4. 清理CAS会话缓存
若旧会话缓存存储了不完整属性,可重启CAS服务,或配置会话超时自动清理:
# 设置会话最大存活时间与超时时间 cas.tgc.maxAgeInSeconds=86400 cas.tgc.timeoutInSeconds=3600
内容的提问来源于stack exchange,提问作者med_alpa
相关产品推荐
相关产品推荐

