Identityserver4 Blazor WASM-身份角色

Identityserver4 Blazor WASM-身份角色,identityserver4,blazor-webassembly,Identityserver4,Blazor Webassembly,在我以前的MVC项目中,我使用默认标识页登录(/identity/Account/login) 通过在我的Controller.cs上使用下面的代码,我可以获得各种值,如当前用户分配到的角色、角色声明等 var claims = User.Claims; // or HttpContext.User.Claims //expected claim values are: //{the-user-guid} //email@test.com //["Admin", &quo

在我以前的MVC项目中,我使用默认标识页登录(/identity/Account/login)

通过在我的Controller.cs上使用下面的代码,我可以获得各种值,如当前用户分配到的角色、角色声明等

var claims = User.Claims; // or HttpContext.User.Claims

//expected claim values are:

//{the-user-guid}
//email@test.com
//["Admin", "Manager"]
//Permission.Module1.Create    <-- I need this (in Blazor)
//Permission.Module2.Read      <-- I need this (in Blazor)
//and so on...
var-claims=User.claims;//或HttpContext.User.Claims
//预期索赔价值为:
//{用户guid}
//email@test.com
//[“管理员”、“经理”]

//Permission.Module1.Create您需要在页面中插入以下提供程序

@inject Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider AuthenticationStateProvider
然后使用它如下

var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
            user = authState.User;
            var claims = user.Claims?.ToList();
builder.Services.AddAuthorizationCore(options =>
            {
                options.AddPolicy("Admin", policy =>
                {
                    policy.RequireAuthenticatedUser();
                    policy.RequireRole("Admin");
                });
                
            });
[Authorize(Policy = "Admin")]
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Policy ="Admin")]
此外,如果您希望基于角色/策略保护页面,也可以这样做 您可以在program.cs中添加策略

如下

var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
            user = authState.User;
            var claims = user.Claims?.ToList();
builder.Services.AddAuthorizationCore(options =>
            {
                options.AddPolicy("Admin", policy =>
                {
                    policy.RequireAuthenticatedUser();
                    policy.RequireRole("Admin");
                });
                
            });
[Authorize(Policy = "Admin")]
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Policy ="Admin")]
然后在部分类中使用它,如下所示

var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
            user = authState.User;
            var claims = user.Claims?.ToList();
builder.Services.AddAuthorizationCore(options =>
            {
                options.AddPolicy("Admin", policy =>
                {
                    policy.RequireAuthenticatedUser();
                    policy.RequireRole("Admin");
                });
                
            });
[Authorize(Policy = "Admin")]
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Policy ="Admin")]
或在您的页面内,如下所示

var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
            user = authState.User;
            var claims = user.Claims?.ToList();
builder.Services.AddAuthorizationCore(options =>
            {
                options.AddPolicy("Admin", policy =>
                {
                    policy.RequireAuthenticatedUser();
                    policy.RequireRole("Admin");
                });
                
            });
[Authorize(Policy = "Admin")]
@using Microsoft.AspNetCore.Authorization
@attribute [Authorize(Policy ="Admin")]
祝你好运

编辑2021年4月28日

谢谢你的更新Majo

如果要在控制器中获取用户信息 您将需要在控制器构造函数中注入UserManager

private readonly ILogger<WeatherForecastController> _logger;
        private readonly UserManager<ApplicationUser> userManager;

        public WeatherForecastController(ILogger<WeatherForecastController> logger ,
            UserManager<ApplicationUser> userManager)
        {
            _logger = logger;
            this.userManager = userManager;
        }
我希望这能回答你的问题

问候,


哈立德·德希亚

哈立德,谢谢你的回答。对不起,我的问题不清楚。我希望从服务器项目上的MyController.cs获得它。我会更新我的问题。@MaJo我刚刚更新了我的答案,如果您需要任何其他帮助,请告诉我!要访问AspNetRoleClaims,您可以使用UserManager,或者只需插入dataContext并立即访问它,请检查我的更新答案,它将向您展示如何从控制器访问它