C# 如何使用IdentityServer4访问令牌和[授权]属性
我有项目解决方案:IdentityServer4,ApiServer,MvcClient。我使用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(角色)]= “管理员”)]不起作用 这里的源代码:不幸的是,我
混合流
。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。存在一些安全更改,请阅读以下内容: