Zeu*_*s82 3 authentication asp.net-core
我正在使用openiddict和ASP Identity,并且尝试将“ GroupId”添加为登录时返回的身份验证令牌的声明(使用/ connect / token端点-请参见下面的示例)。GroupId是我的AplicationUser类中的一个属性。
我尝试使用,IClaimsTransformer但似乎很笨拙,我无法轻松地从ClaimsTransformationContext进入UserManager。
我该如何通过自己的DI获得UserManager IClaimsTransformer或将GroupId添加到在连接/令牌端点生成的令牌中呢?
我遵循此示例来设置网站。这是我想做的:
var groupGuid = User.Claims.FirstOrDefault(c => c.Type == "GroupGuid");
Run Code Online (Sandbox Code Playgroud)
小智 5
有两种方法可以实现它:
首先,CreateUserPrincipalAsync在您的定制中覆盖方法SignInManager:
public override async Task<ClaimsPrincipal> CreateUserPrincipalAsync(ApplicationAdmin user)
{
var principal = await base.CreateUserPrincipalAsync(user);
// use this.UserManager if needed
var identity = (ClaimsIdentity)principal.Identity;
identity.AddClaim(new Claim("MyClaimType", "MyClaimValue"));
return principal;
}
Run Code Online (Sandbox Code Playgroud)
第二种方法是覆盖CreateAsync自定义方法UserClaimsPrincipalFactory:
public override async Task<ClaimsPrincipal> CreateAsync(ApplicationUser user)
{
var principal = await base.CreateAsync(user);
var identity = (ClaimsIdentity)principal.Identity;
identity.AddClaim(new Claim("MyClaimType", "MyClaimValue"));
return principal;
}
Run Code Online (Sandbox Code Playgroud)
基本上是一样的,因为base.CreateUserPrincipalAsync方法在内部SignInManager调用this.UserClaimsPrincipalFactory()。
不要忘记您的自定义实现加入到服务:
无论是
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSignInManager<CustomSignInManager>();
}
Run Code Online (Sandbox Code Playgroud)
要么
public void ConfigureServices(IServiceCollection services)
{
...
services.AddScoped<IUserClaimsPrincipalFactory<ApplicationUser>, CustomClaimsPrincipalFactory>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2430 次 |
| 最近记录: |