Shibboleth 4 IDP:如何为特定登录流指定专属属性解析器文件
为Shibboleth 4 IDP的不同登录流指定专属属性解析器
要实现flow1用attribute-resolver.xml、flow2用attribute-resolver-ldap.xml,你需要分两步配置:先注册两个独立的属性解析器Bean,再给每个登录流绑定对应的解析器。
1. 在conf/global.xml中注册两个属性解析器Bean
Shibboleth的核心配置通过Spring Bean管理,我们需要为两个配置文件分别创建AttributeResolver实例:
打开conf/global.xml,添加以下两个Bean定义(可以放在默认的shibboleth.AttributeResolver Bean附近,若不需要默认解析器也可以替换掉它):
<!-- 对应flow1的属性解析器,使用标准attribute-resolver.xml --> <bean id="flow1AttributeResolver" class="net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl" p:resolverResources="%{idp.home}/conf/attribute-resolver.xml" /> <!-- 对应flow2的属性解析器,使用LDAP专属的attribute-resolver-ldap.xml --> <bean id="flow2AttributeResolver" class="net.shibboleth.idp.attribute.resolver.impl.AttributeResolverImpl" p:resolverResources="%{idp.home}/conf/attribute-resolver-ldap.xml" />
2. 为每个登录流绑定对应的属性解析器
接下来要在登录流的配置中指定使用哪个解析器,具体位置取决于你的流是如何定义的:
场景A:登录流有独立配置文件(如conf/authn/flow1.xml)
如果你的flow1和flow2是作为独立的XML文件放在conf/authn/目录下,找到每个文件中的AuthenticationFlowDescriptor Bean,添加attributeResolverRef属性:
比如conf/authn/flow1.xml:
<bean id="authn/flow1" parent="shibboleth.AuthenticationFlow" p:attributeResolverRef="flow1AttributeResolver" <!-- 其他原有配置(如登录页面、认证处理器等)保持不变 --> />
conf/authn/flow2.xml同理:
<bean id="authn/flow2" parent="shibboleth.AuthenticationFlow" p:attributeResolverRef="flow2AttributeResolver" <!-- 其他原有配置保持不变 --> />
场景B:登录流定义在conf/authn/general-authn.xml中
如果你的两个流是在general-authn.xml里统一配置的,找到每个<bean>定义,同样添加attributeResolverRef:
<!-- flow1的配置 --> <bean id="authn/flow1" parent="shibboleth.AuthenticationFlow" p:attributeResolverRef="flow1AttributeResolver" p:supportedPrincipals="#{{'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport'}}" <!-- 其他配置项 --> /> <!-- flow2的配置 --> <bean id="authn/flow2" parent="shibboleth.AuthenticationFlow" p:attributeResolverRef="flow2AttributeResolver" p:supportedPrincipals="#{{'urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport'}}" <!-- 其他配置项 --> />
3. 关键注意事项
- 确保两个属性解析器配置文件中的属性ID不重复,否则可能导致属性覆盖或解析异常。
- 修改配置后必须重启Shibboleth IDP服务,才能让新的Bean和流配置生效。
- 如果你的登录流是基于默认模板(如Password流)扩展的,要确认父Bean允许覆盖
attributeResolverRef属性,若不允许可以直接定义独立的AuthenticationFlowDescriptorBean。
内容的提问来源于stack exchange,提问作者smudo
相关产品推荐
相关产品推荐

