在XSD中使用SAML断言

4

我有一个webservice操作,其中请求正文的一部分是SAML Assertion。 我有以下XSD:

<xsd:element name="CreateRequest">
    <xsd:complexType>
        <xsd:sequence>
            <xsd:element name="info" type="SomeRequestObj"/>
            <xsd:element ref="saml:Assertion" />
        </xsd:sequence>
    </xsd:complexType>
</xsd:element>
指的是:

<xsd:import namespace="urn:oasis:names:tc:SAML:2.0:assertion"schemaLocation="../samlv2_0/saml-schema-assertion-2.0.xsd"/>

这个SAML模式是从SAML 2.0中复制的。 它会生成名称为*Type.java的类。 我很难为此创建一个单元测试(这是一个带有UI的独立应用程序)。

我的请求需要在请求正文中包含一个SAML AssertionType元素。 因此,我不能使用OpenSaml来生成它,因为它会给我一个SAML Assertion对象而不是AssertionType。

我尝试手动生成AssertionType对象,但我很难做到这一点。 有没有办法使用OpenSaml来生成这个对象呢? 因为我看到的XML将与我只使用OpenSaml生成Assertion对象时得到的XML相同。 有没有简化这个过程的方法?

编辑:添加了Assertion的XSD片段

<element name="Assertion" type="saml:AssertionType"/>
<complexType name="AssertionType">
<sequence>
<element ref="saml:Issuer"/>
<element ref="ds:Signature" minOccurs="0"/>
<element ref="saml:Subject" minOccurs="0"/>
<element ref="saml:Conditions" minOccurs="0"/>
<element ref="saml:Advice" minOccurs="0"/>
<choice minOccurs="0" maxOccurs="unbounded">
<element ref="saml:Statement"/>
<element ref="saml:AuthnStatement"/>
<element ref="saml:AuthzDecisionStatement"/>
<element ref="saml:AttributeStatement"/>
</choice>
</sequence>
<attribute name="Version" type="string" use="required"/>
<attribute name="ID" type="ID" use="required"/>
<attribute name="IssueInstant" type="dateTime" use="required"/>
</complexType>

这会生成AssertionType对象。

2个回答

3

SAML断言属于复杂类型"AssertionType",但元素名称为"Assertion"。OpenSaml生成的<Assertion>元素应该是可以使用的。

该元素在SAML核心规范第2.3.3节中定义。


是的,您应该能够设置一个断言对象(具有元素名称“assertion”),其类型为AssertionType。元素名称不需要与元素类型相同。 - Anders Abel
<Assertion>元素的类型是AssertionType。您应该能够直接在<CreateRequest>元素中使用由OpenSAML生成的<Assertion> - Anders Abel
我的XSD生成的类需要一个AssertionType类型的对象来设置Assertion属性,所以我得到了一个错误提示,要求我将setter更改为AssertionType类型或将assertion强制转换为AssertionType类型。 - avinash chavan
1
看起来你遇到了一个问题,这个问题涉及到从XSD生成的AssertionType类型的类,以及OpenSAML创建了另一个同名的类。你需要做一些工作来连接这两个类。 - Anders Abel
有没有一种方法可以在请求(SOAP)的正文中包含SAML断言?如果是,则我该如何继续处理? - avinash chavan
显示剩余2条评论

0

有没有办法将XML转换(取消编组)为生成的Java类? 我正在使用Axis2的wsdl2code插件。 - avinash chavan
我尝试使用xjc(JAXB)从saml-schema-assertion-2.0.xsd生成Java类,并为每个类使用自定义绑定,事实上我能够生成没有“Type”后缀的类。然后,我尝试使用OpenSAML 2.6.4使用这些类创建断言,但事实证明这是不可能的,因为尽管名称相同,它们来自不同的类型。所以我认为你需要进行映射。 - Baderous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接