SAML:如何构造 AssertionConsumerService 地址

SAML: How does AssertionConsumerService address get constructed

我正在使用 Spring SAML 库。

当我生成 SP 的元数据时,有时服务器的 IP 地址用于 AssertionConsumerService。

例如。我得到这样的东西:

<md:AssertionConsumerService Binding="bindings:HTTP-POST" Location="http://12.34.56.78:8000/saml/SSO"/>

但有时会使用同一服务器的 DNS 地址,而不是 12.34.56.78。

我的问题是:AssertionConsumerService地址是如何生成的?

真的,那个AssertionConsumerService只是一个URI,是这样的:

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

而DNS只是IP的别名,所以只要端点可以用于SAML通信,IP或DNS都应该可以。

另一件需要注意的事情是,由于 SAML 通信需要安全通道,因此在生产环境中应使用 https 而不是 http

一些XSD reference为此:

<element name="AssertionConsumerService" type="md:IndexedEndpointType"/>

<complexType name="IndexedEndpointType">
    <complexContent>
        <extension base="md:EndpointType">
            <attribute name="index" type="unsignedShort" use="required"/>
            <attribute name="isDefault" type="boolean" use="optional"/>
        </extension>
    </complexContent>
</complexType>

<complexType name="EndpointType">
    <sequence>
        <any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
    </sequence>
    <attribute name="Binding" type="anyURI" use="required"/>
    <attribute name="Location" type="anyURI" use="required"/>
    <attribute name="ResponseLocation" type="anyURI" use="optional"/>
    <anyAttribute namespace="##other" processContents="lax"/>
</complexType>