Я использую реализацию spring-saml. В классе WebSSOProfileConsumerImpl я смог найти следующие строки кода, которые проверяют nameId в утверждении ответа SAML.
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, включая тот, который я использую, упоминают, что nameId может быть частью объекта / атрибута. Похоже, что есть несколько реализаций, которые принимают nameId в теме, как SimpleSAMLPHP.
Тема, которую я получаю, выглядит следующим образом, и в ней не указано имяId
<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 является частью только subject в реализации spring-saml.
@vschafer Есть ли способ настроить securityContext.xml, чтобы выбрать nameId, который является частью определенного атрибута, а не из темы ?