我正在创建一个站点,我希望允许管理员使用用户名密码组合登录,以执行他的正常管理任务。但是一旦他需要做一些“危险”的任务,我想让他使用 2FA 登录(仅一次),从而提升他对当前会话的权限。
有谁知道如何做到这一点,或者至少指出我正确的方向。
谢谢
我正在创建一个站点,我希望允许管理员使用用户名密码组合登录,以执行他的正常管理任务。但是一旦他需要做一些“危险”的任务,我想让他使用 2FA 登录(仅一次),从而提升他对当前会话的权限。
有谁知道如何做到这一点,或者至少指出我正确的方向。
谢谢
当您登录时,您必须请求所需的范围,因此只需确保您的客户有两个可用的范围,但您只要求您需要的范围。
例如:创建一个“管理”范围和一个“危险”范围,并让您的客户可以使用这两个范围。在初始登录时只询问“管理员”,但当他们点击危险页面时,发送另一个登录请求,但同时询问“管理员”和“危险”范围。
此外,如果只有某些管理员可以执行危险任务,请确保只给这些管理员“危险”声明。您可以手动将该声明放入 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