Iam使用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可能是主题/属性的一部分。似乎有一些实现可以像SimpleSAMLPHP一样接受主题中的nameId。
我正在接收的主题如下,并且没有包含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实现中唯一主题的一部分的原因。
@vschafer是否可以自定义securityContext.xml以选择nameId,它是特定属性的一部分,而不是主题的一部分?
最佳答案
Spring SAML当前需要NameID
出现。更改此设置将需要更改代码,并且当前不能仅通过配置来完成。请随时打开功能请求以在Spring SAML Jira中进行更改。