Identityserver4 Blazor WASM-身份角色
在我以前的MVC项目中,我使用默认标识页登录(/identity/Account/login) 通过在我的Controller.cs上使用下面的代码,我可以获得各种值,如当前用户分配到的角色、角色声明等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
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并立即访问它,请检查我的更新答案,它将向您展示如何从控制器访问它