有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在XSD中使用SAML断言

我有一个webservice操作,其中我将获得SAML断言作为请求主体的一部分。 我有以下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>

saml:Assertion引用:

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

此saml架构是从SAML2.0复制的。 这将生成名为*Type.java的类。 我很难为它创建一个单元测试(这是一个带有UI的独立应用程序)

我的请求需要请求正文中的SAML AssertionType元素。 因此,我不能使用OpneSaml生成它,因为它给了我一个SAML断言对象,而不是AssertionType

我尝试手动生成AssertionType对象,但很难做到这一点
有没有一种方法可以使用OpenSaml来生成这个
正如我看到的,xml将与我使用OpenSaml生成断言对象时得到的一样。 有没有办法简化这一点

编辑:添加了断言的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) 个答案

  1. # 2 楼答案

    SAML断言属于复杂类型“AssertionType”,但元素名为“Assertion”。OpenSaml生成的<Assertion>元素应该很好

    元素在SAML core spec中的第2.3.3节中定义