其他分享
首页 > 其他分享> > spring – SAMLException:NameID元素必须作为Response消息中Subject的一部分出现,请在IDP配置中启用它

spring – SAMLException:NameID元素必须作为Response消息中Subject的一部分出现,请在IDP配置中启用它

作者:互联网

我使用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实现中唯一的主题.

@vschafer有没有一种方法可以自定义securityContext.xml来选择nameId,它是特定属性的一部分而不是来自主题?

解决方法:

Spring SAML目前需要NameID才能存在.更改此项将需要更改代码,目前无法仅通过配置完成.请随意在Spring SAML Jira更改此功能.

标签:spring,spring-security,assertion,saml-2-0,spring-saml
来源: https://codeday.me/bug/20190609/1207193.html