如何使用 IdentityServer4 访问令牌和 [Authorize] 属性
Posted
技术标签:
【中文标题】如何使用 IdentityServer4 访问令牌和 [Authorize] 属性【英文标题】:How to use IdentityServer4 Access Token and [Authorize] attribute 【发布时间】:2019-02-01 20:41:50 【问题描述】:我有以下项目的解决方案:IdentityServer4、ApiServer、MvcClient。我使用Hybrid flow
。身份验证工作得很好,但我无法在 MvcClient 中获得 role
。
在 MvсСlient 应用程序中,授权后,我得到access_token
。令牌包含必要的声明。但是 MVC 应用程序无法访问用户角色。
也就是说,假设我将从 MVC 应用程序调用外部 API。但我还需要 MVC 应用程序才能使用用户角色。
属性 [Authorize] 工作正常,但 [Authorize(Roles = "admin")] 不起作用!
这里的源代码:gitlab
【问题讨论】:
不提供源代码很难理解问题的原因 好的!这个项目在gitlab 将用户角色添加到您的声明中。 不行 2.1 有一些安全变化,请阅读:leastprivilege.com/2018/07/16/… 【参考方案1】:不幸的是,我没有找到比拦截 Access Token 事件更好的解决方案。然后我对其进行解析并手动将声明添加到 cookie。
options.Events = new OpenIdConnectEvents
OnTokenResponseReceived = xxx =>
JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
JwtSecurityToken jwt = handler.ReadJwtToken(xxx.TokenEndpointResponse.AccessToken);
var claimsIdentity = (ClaimsIdentity) xxx.Principal.Identity;
claimsIdentity.AddClaims(jwt.Claims);
return Task.FromResult(0);
;
我会非常感谢你!如果您查看项目的源代码(已更新到 asp.net core 2.1)并提供最佳选择!
【讨论】:
以上是关于如何使用 IdentityServer4 访问令牌和 [Authorize] 属性的主要内容,如果未能解决你的问题,请参考以下文章
如何在 IdentityServer4 中添加自定义声明以访问令牌? [关闭]
如何使用 ClientCredentials grantType 向 IdentityServer4 生成的我的访问令牌添加声明