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 次 |
最近记录: |