我一直在使用Apache CXF和WSS4J着手实施SecurityTokenService。
使用“CustomClaimsHandler”实施“org.apache.cxf.sts.claims.ClaimsHandler”我可以创建一个包含这种属性的SAML令牌:
<saml2:Attribute Name="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/role" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
<saml2:AttributeValue xsi:type="xs:string">admin</saml2:AttributeValue>
</saml2:Attribute>
关键是我现在试图创造一些XML内容的属性。 举个例子 :
<saml2:Attribute Name="http://my/xml/content">
<saml2:AttributeValue xsi:type="???">
<somthing>
<somthingElse>text</somthingElse>
</somthing>
</saml2:AttributeValue>
</saml2:Attribute>
我看了打“ClaimsAttributeStatementProvider”(org.apache.cxf.sts.claims)的自定义实现,但我似乎必须使用“AttributeBean”类WSS4J的。 但是这个类似乎并没有让我改变的类型。
是否有人现在该怎么处理这个问题?
================================================== ====================
编辑以下科尔姆的回答:
我添加了一个依赖于opensaml核心V3.0.0在我CXF项目STS获得“org.opensaml.core.xml.config.XMLObjectProviderRegistrySupport”类如你指着我为例。 调用XMLObjectProviderRegistrySupport.getBuilderFactory()之前,我似乎必须初始化opensaml的配置。 我没使用嵌入式配置,我想我在CXF WSS4J使用。 我管理的初始化调用“org.opensaml.core.config.InitializationService.initialize();”
一切似乎好为创作AttributeBean的与XSAny类型。
问题是,当WSS4J尝试处理SAMLCallback:
Caused by: java.lang.ClassCastException: org.opensaml.core.xml.schema.impl.XSAnyBuilder cannot be cast to org.opensaml.xml.XMLObjectBuilder at org.opensaml.xml.XMLConfigurator.initializeObjectProviders(XMLConfigurator.java:236) at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:182) at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:166) at org.opensaml.xml.XMLConfigurator.load(XMLConfigurator.java:143) at org.apache.wss4j.common.saml.OpenSAMLBootstrap.initializeXMLTooling(OpenSAMLBootstrap.java:105) at org.apache.wss4j.common.saml.OpenSAMLBootstrap.bootstrap(OpenSAMLBootstrap.java:86) at org.apache.wss4j.common.saml.OpenSAMLUtil.initSamlEngine(OpenSAMLUtil.java:61) at org.apache.wss4j.common.saml.SamlAssertionWrapper.(SamlAssertionWrapper.java:204) at org.apache.cxf.sts.token.provider.SAMLTokenProvider.createSamlToken(SAMLTokenProvider.java:303) at org.apache.cxf.sts.token.provider.SAMLTokenProvider.createToken(SAMLTokenProvider.java:122) ... 45 more
我想我有一个版本的问题:
要么我必须让我的STS的opensaml知道我opensaml核V3.0.0类的配置,或者我不得不使用不同版本的CXF来获得WSS4J的新版本。
我CXF的版本是3.0.1,并且对WSS4J,WS-Security的常见依赖于2.0.1版女巫对opensaml版本2.6.1的依赖
你有没有对如何解决此问题的想法?
问候
=========================
编辑科尔姆在后期解决问题: SAML2断言与家中CXF定义AttributeBean