我拥有以下项目的解决方案: IdentityServer4 , ApiServer , MvcClient 。我使用Hybrid flow
。验证效果很好,但我无法在MvcClient中获得role
。
在MvсСlient应用程序中,获得授权后,我得到access_token
。令牌包含必要的声明。但是MVC应用程序无法访问用户角色。
也就是说,假设我将从MVC应用程序调用外部API。但是我还需要MVC应用程序才能使用用户角色。
属性 [Authorize] 工作正常,但 [Authorize(Roles = “ admin”)] 不起作用!
此处的源代码: gitlab
答案 0 :(得分:1)
不幸的是,我没有找到比拦截访问令牌事件更好的解决方案。然后,我对其进行了解析,然后将声明手动添加到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),并提供最佳选择!