我正在创建一个网站,我希望管理员可以使用用户名密码组合登录,以执行正常的管理任务。但是一旦他需要做一些“危险”的任务,我想让他使用2FA(仅一次)登录,从而提升他对当前会话的权限。
有谁知道如何做到这一点,或者至少指出我正确的方向。
THX
答案 0 :(得分:1)
当您登录时,您必须请求所需的范围,因此请确保您的客户端同时具有两个范围,但您只需要提供所需的范围。
例如:创建“管理”范围和“危险”范围,并使两个范围都可供您的客户使用。在初次登录时只需要“管理员”,但是当他们点击危险页面时,发送另一个登录请求,但要求“管理员”和“危险”范围。
此外,如果只有某些管理员可以执行危险任务,请确保仅向这些管理员提供“危险”声明。您可以手动将该声明放在UserClaims表中,或者如果您使用MembershipReboot作为数据库访问,请在useraccount对象上使用'AddClaim()'方法。
<强>更新强> 对不起,这个答案与双因素身份验证无关,更多与如何将第二个范围添加到用户令牌有关。
<强>更新强> 例如,如果您使用的是“资源所有者”流程,则原始登录请求(仅具有“管理”范围)如下所示:
POST /ids/connect/token HTTP/1.1
Host: https://mywebsite.com
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
grant_type=password&username=billybob&password=mypassword&scope=admin&client_id=MyClientId&client_secret=MyClientSecret
然后,当您想要获得“危险”范围时,以相同的方式进行另一次登录,但是将“危险”范围添加到您的请求中(以空格分隔),您获得的访问令牌现在将具有两个范围(管理员和危险):
POST /ids/connect/token HTTP/1.1
Host: https://mywebsite.com
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
grant_type=password&username=billybob&password=mypassword&scope=admin dangerous&client_id=MyClientId&client_secret=MyClientSecret