gpt4 book ai didi

asp.net-web-api - 添加角色声明 - 我应该使用 IClaimsTransformer

转载 作者:行者123 更新时间:2023-12-01 19:00:06 25 4
gpt4 key购买 nike

我们想向当前主体添加大量角色声明(我们使用 Authorize(Roles) 属性),并发现 IClaimsTransformer 看起来像完美契合。

我们是这样注册的

 app.UseClaimsTransformation(new ClaimsTransformationOptions
{
Transformer = new GetRolesFromDatabaseClaimsTransformer(new RoleManager2(Configuration.GetConnectionString("ourcoolapp")))
});

变换如下:

public Task<ClaimsPrincipal> TransformAsync(ClaimsTransformationContext context)
{
// A hacky way to not load on all requests. Better ideas?
if (!context.Context.Request.Path.Value.Contains("api/"))
{
return Task.FromResult(context.Principal);
}

var roleClaims = RoleManager.GetRolesForUser(context.Principal.Identity.Name).Select(roleName => new Claim("role", roleName));

var claims = new List<Claim> { };
var identity = context.Principal.Identity as ClaimsIdentity;
claims.AddRange(identity.Claims);
claims.AddRange(roleClaims);

var userIdentity = new ClaimsIdentity(claims, "local");
var userPrinicpal = new ClaimsPrincipal(userIdentity);

return Task.FromResult(userPrinicpal);
}

问题:是否有替代的或更智能的方法来添加角色声明?

谢谢

拉尔西

最佳答案

另一个选项可能是 UserClaimsPrincipalFactory

它提供了为给定用户创建声明主体的方法,您可以像 ClaimsTransformer 一样对其进行自定义。

默认情况下,它会将 UserNameUserId 添加到声明集合中。为了自定义它,您可以从 UserClaimsPrincipalFactory 驱动并覆盖 CreateAsync

public class AppClaimsPrincipalFactory : UserClaimsPrincipalFactory<User, Role>
{
public AppClaimsPrincipalFactory(UserManager<User> userManager,
RoleManager<Role> roleManager,
IOptions<IdentityOptions> optionsAccessor,
ILogger<AppClaimsPrincipalFactory> logger)
: base(userManager, roleManager, optionsAccessor)
{
logger.LogInformation("AppClaimsPrincipalFactory ctor");
}

public override async Task<ClaimsPrincipal> CreateAsync(User user)
{
var principal = await base.CreateAsync(user);
((ClaimsIdentity)principal.Identity).AddClaims(new []
{
new Claim("Foo", "Bar"),
});

return principal;
}
}

并在DI中注册工厂:

services.AddScoped<IUserClaimsPrincipalFactory<User>,  AppClaimsPrincipalFactory>();  

只要用户提出请求,它就会更改/覆盖该声明。
欲了解更多信息,请查看来源GitHub .

关于asp.net-web-api - 添加角色声明 - 我应该使用 IClaimsTransformer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42668095/

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