gpt4 book ai didi

ASP.NET Core 3.1 + Angular 9 基于 Angular 色的身份验证

转载 作者:行者123 更新时间:2023-12-03 17:11:32 25 4
gpt4 key购买 nike

我已经使用 ASP.NET Core 3.1 创建了一个 Web 应用程序,并使用 Visual Studio 模板创建了 angular 并启用了身份验证。
enter image description here
然后我搭建了 Identity 并将其添加到 Startup.cs :

services.AddDefaultIdentity<ApplicationUser>(options => 
options.SignIn.RequireConfirmedAccount = true)
.AddRoles<IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

services.AddIdentityServer().AddApiAuthorization<ApplicationUser, ApplicationDbContext>();

services.AddAuthentication().AddIdentityServerJwt();

之后,我创建了 3 个用户并为他们分配了不同的 Angular 色。当我添加属性 [Authorize]对于任何 Controller 操作,它都可以正常工作。但是我怎样才能让它基于 Angular 色呢?我试过 [Authorize(Roles = "Administrator")]但它拒绝了访问。在不 protected 方法上:
 var loggedinUser = await _userManager.FindByNameAsync(userid);
var roles = await _userManager.GetRolesAsync(loggedinUser);

Angular 色列表上有管理员,所以我不知道我缺少什么才能使它工作。同样在 Angular 组件中,如何获取当前登录用户的 Angular 色?

最佳答案

您可以 延长 IdentityServer 的默认 ProfileService 的实现包括 Angular 色像以下方式一样 claim 。

public class ExtendedProfileService : ProfileService<ApplicationUser>
{
public ExtendedProfileService(UserManager<ApplicationUser> userManager, IUserClaimsPrincipalFactory<ApplicationUser> claimsFactory) : base(userManager, claimsFactory)
{

}

public override async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
await base.GetProfileDataAsync(context);
var user = await UserManager.GetUserAsync(context.Subject);
var roles = await UserManager.GetRolesAsync(user);
var claims = new List<Claim>();

foreach (var role in roles)
{
claims.Add(new Claim("role", role));
}
context.IssuedClaims.AddRange(claims);
}
}
并且不要忘记将您的扩展配置文件服务注册到依赖容器
services.AddTransient<IProfileService, ExtendedProfileService>();

关于ASP.NET Core 3.1 + Angular 9 基于 Angular 色的身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62460572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com