【发布时间】:2014-12-05 12:51:32
【问题描述】:
我正在使用 spring-saml 实现。在 WebSSOProfileConsumerImpl 类中,我可以找到以下代码行,用于检查 SAML 响应的断言中的 nameId。
NameID nameID;
if (subject.getEncryptedID() != null) {
Assert.notNull(context.getLocalDecrypter(), "Can't decrypt NameID, no decrypter is set in the context");
nameID = (NameID) context.getLocalDecrypter().decrypt(subject.getEncryptedID());
} else {
nameID = subject.getNameID();
}
根据代码,很明显 nameId 应该是主题的一部分。但大多数 IDP 包括我正在使用的 IDP 都提到 nameId 可能是主题/属性的一部分。似乎有一些实现在主题中接受 nameId,就像 SimpleSAMLPHP。
我收到的主题如下,没有附上nameId
<saml2:Subject>
<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<saml2:SubjectConfirmationData Address="91.X.X.X" InResponseTo="XXXX" NotOnOrAfter="2014-10-10T10:34:26.619Z" Recipient="http://localhost:8080/XXXX/saml/SSO"/>
</saml2:SubjectConfirmation>
</saml2:Subject>
但是,有一个 属性,它的 属性值 是 nameId。为什么不能用这个来代替主题中的那个。
<saml2:Attribute FriendlyName="testID" Name="urn:oid:1.3.6.1.4.1.5923.1.1.1.10" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri">
<saml2:AttributeValue>
<saml2:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="https://XXXX/idp/shibboleth" SPNameQualifier="urn:XX:XX:XX">XXXXXXXXXXXXXXXXX=
</saml2:NameID>
</saml2:AttributeValue>
</saml2:Attribute>
谁能解释一下为什么 nameId 是 spring-saml 实现中唯一的 subject 的一部分。
@vschafer 有没有一种方法可以自定义 securityContext.xml 以选择 nameId,它是特定 attribute 的一部分,而不是来自 主题?
【问题讨论】:
-
@vschafer 如果您对这个问题有任何想法,请告诉我?
标签: spring spring-security saml-2.0 assertion spring-saml