C# 如何使用IdentityServer4访问令牌和[授权]属性

C# 如何使用IdentityServer4访问令牌和[授权]属性,c#,asp.net,asp.net-mvc,asp.net-core,identityserver4,C#,Asp.net,Asp.net Mvc,Asp.net Core,Identityserver4,我有项目解决方案:IdentityServer4,ApiServer,MvcClient。我使用混合流。Auth工作得很好,但我无法在MvcClient中获得角色 在MvСС客户端应用程序中,经过授权后,我获得访问\u令牌。令牌包含必要的声明。但是MVC应用程序无法访问用户角色 也就是说,假设我将从MVC应用程序调用外部API。但是我还需要MVC应用程序能够使用用户角色 属性[Authorize]可以正常工作,但[Authorize(角色)]= “管理员”)]不起作用 这里的源代码:不幸的是,我

我有项目解决方案:IdentityServer4ApiServerMvcClient。我使用
混合流
。Auth工作得很好,但我无法在MvcClient中获得
角色

在MvСС客户端应用程序中,经过授权后,我获得
访问\u令牌
。令牌包含必要的声明。但是MVC应用程序无法访问用户角色

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

属性[Authorize]可以正常工作,但[Authorize(角色)]= “管理员”)]不起作用


这里的源代码:不幸的是,我没有找到比拦截访问令牌事件更好的解决方案。然后我解析了它,并手动将声明添加到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)并提供最佳选项

如果没有提供源代码,很难理解问题的原因OK!此项目将用户角色添加到您的声明中。它不适用于2.1。存在一些安全更改,请阅读以下内容: