如何使用IdentityServer4访问令牌和[Authorize]属性

时间:2018-08-27 10:16:32

标签: c# asp.net asp.net-mvc asp.net-core identityserver4

我拥有以下项目的解决方案: IdentityServer4 ApiServer MvcClient 。我使用Hybrid flow。验证效果很好,但我无法在MvcClient中获得role

在MvсСlient应用程序中,获得授权后,我得到access_token。令牌包含必要的声明。但是MVC应用程序无法访问用户角色。

也就是说,假设我将从MVC应用程序调用外部API。但是我还需要MVC应用程序才能使用用户角色。

  

属性 [Authorize] 工作正常,但 [Authorize(Roles =   “ admin”)] 不起作用!

此处的源代码: gitlab

1 个答案:

答案 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),并提供最佳选择!