Thinktecture Identityserver提升了管理页面的登录名

时间:2015-08-05 13:06:37

标签: authentication thinktecture-ident-server identityserver3

我正在创建一个网站,我希望管理员可以使用用户名密码组合登录,以执行正常的管理任务。但是一旦他需要做一些“危险”的任务,我想让他使用2FA(仅一次)登录,从而提升他对当前会话的权限。

有谁知道如何做到这一点,或者至少指出我正确的方向。

THX

1 个答案:

答案 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