IdentityServer3在用户登录时需要角色(作为附加凭据)

时间:2015-09-24 22:50:55

标签: c# authentication oauth-2.0 identityserver3

我有一个系统,如果用户使用角色" Readonly"以Joe身份登录。然后,他将被授予访问权限(只是很明显),但是如果他以乔的角色登录#34;管理员"然后他将有权进行行政职能。但是,如果他希望从Readonly角色更改为管理员角色,我希望他必须重新登录,以便他可以将他的帐户以Readonly身份登录到显示屏幕上,而不必担心会有人劫持他的管理员权限。

现在我还需要能够通过代码授权通过隐式授权或其他服务器登录Web客户端,并使该服务能够使用相同的角色(同时仍然需要Joe以如果他尚未经过身份验证,则会发挥特殊作用。)

现在我一直在尝试使用IdentityServer3执行此操作,但我似乎无法将角色信息作为用户身份验证的一部分,我尝试将一个角色的acr_value:ReadOnly添加到令牌请求(然后转为如果用户未登录,则为身份验证请求,但如果他们使用acO_value以ReadOnly身份登录,然后返回使用Adminstrator的acr_value登录,则只允许他们进入,因为他们已经过用户身份验证。

有关我应该使用的内容的提示,而不是我正在做的事情,或者我在OAuth2 / OpenID Connect世界中如何完全脱离基础?

1 个答案:

答案 0 :(得分:1)

我终于想通了,所以对于其他可能想做同样事情的人就是我所做的。

首先,您构建了一个自定义UserService,它在acr_values中查找额外信息。然后在AuthenticateResult中为该额外信息创建声明。 其次,您必须覆盖ClaimProvider,以在生成的标记中的第一步中包含您的自定义声明集。 接下来,您需要一个CustomRequestValidator,以检查是否正在设置新的acr_value与您当前使用的令牌中存储的acr_value相比。如果它已更改并且您要强制用户重新进行身份验证,则可以设置'request.PromptMode =“login”;' 就是这样,使用这组步骤,我现在可以使用3个值(用户名,密码和角色)对用户进行身份验证,如果角色请求更改,我可以要求他们重新进行身份验证。

快速地工作。