SAML2 XML结构化的属性值(SAML2 xml structured attribute va

2019-10-22 02:23发布

我一直在使用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

Answer 1:

在WSS4J的AttributeBean类的setAttributeValues方法允许你通过OpenSAML XMLObject组成的对象。 所以,你可以可以创建自定义属性使用OpenSAML类型,然后通过他们通过。 以下是在一个WSS4J测试用例,在(见“testSAML2AttrAssertionIntegerAttribute”)增加了一个“整数”类型:

http://svn.apache.org/viewvc/webservices/wss4j/trunk/ws-security-dom/src/test/java/org/apache/wss4j/dom/saml/SamlTokenTest.java?view=markup

科尔姆。



文章来源: SAML2 xml structured attribute values
标签: xml cxf saml