带有“POST”绑定的SAML 2.0:服务提供商有没有办法让IdP对特定请求进行用户重新认证?我的意思是网络用户第一次输入登录名/密码,而不是将某种cookie存储在浏览器内存中,以便它记住用户,并且下次在会话中不再要求他输入密码。我希望SP能够强制执行重新身份验证,这意味着要求用户再次输入密码的命令
我找到的唯一类似的东西(ForceAuthn
)并没有帮助我:
<samlp:AuthnRequest ForceAuthn="true" ... >
根据文档ForceAuthn
正是我所需要的,但由于某种原因,Microsoft ADFS 2.0完全忽略了它而不是要求用户输入密码
答案 0 :(得分:3)
ADFS&#39;在IdP端登录用户的默认行为是401(NTLM)质询,并且所有主流浏览器将缓存用户的id / pw输入。即使您指定&#34; ForceAuthn = \&#34; true \&#34;&#34;,它也无济于事,因为客户端浏览器将再次发送您的缓存ID / pw。
有一种方法可以更改ADFS登录策略的默认行为,以采用html表单登录。假设您在默认位置安装ADFS,可以找到c:\ inetpub \ adfs \ ls \ web.config。并且有<localAuthenticationTypes>
元素,并确保将<add name="Forms" page="FormsSignIn.aspx" />
作为其中的第一个元素。您也可以根据需要自定义登录表单页面。
答案 1 :(得分:0)
我偶然发现了ForceAuthn参数和ADFS的类似问题。
特别要求ACR与ForceAuthn属性结合使用似乎对我有用:
<samlp:AuthnRequest ForceAuthn="true" [...]>
<samlp:RequestedAuthnContext Comparison="exact">
<saml:AuthnContextClassRef>
urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport
</saml:AuthnContextClassRef>
</samlp:RequestedAuthnContext>
[...]
</samlp:AuthnRequest>
这实际上是我打算发送给ADFS的请求的确切含义:
忽略您的身份验证上下文并确保用户的密码是 提供。