我知道SAML如何用于单点登录(SSO)。也就是说,从SP重定向到IDP并从SAML响应/断言中获取用户的身份。
我的问题是 - SAML 2.0规范是否定义了如何将用户名和密码作为SAML请求xml的一部分进行身份验证?请注意,我不是在谈论单点登录,只是想要验证用户名/密码。
谢谢,
答案 0 :(得分:2)
SAML标准支持在<saml:Subject>
的{{1}}字段中传递用户标识符(即身份验证请求)。
但是,作为<AuthnRequest>
的一部分,没有内置支持传递密码。恕我直言这样做违背了SAML2的原则,因为它希望Idp在验证时只使用密码。通常,Idp可以使用它认为适合的任何手段来确认受试者的身份。这可能是一个密码,但也可以是一个证书或通过短信进行一次性交换。或者别的什么 - 这取决于Idp。
也就是说,AuthnRequest
中有<Extensions>
个元素可用于携带密码。这样做需要仔细考虑安全因素,因为<AuthnRequest>
内容并非设计为保密。如果使用Http Redirect绑定,则内容将记录在Web服务器中,并在浏览器历史记录中可见。如果使用Http POST绑定,则浏览器仍然可以看到密码。我建议使用SOAP或Artifact绑定来确保数据直接从SP传输到Idp。但请注意,这些绑定在框架中的支持相当少。