ASP.NET Identity Core 2:基于登录URL添加自定义声明

时间:2018-12-03 19:49:15

标签: asp.net-core asp.net-identity claims-based-identity

我有一个实现自定义UserClaimsPrincipalFactory的ASP.NET核心应用程序,包括以下方法:

protected override async Task<ClaimsIdentity> GenerateClaimsAsync(TUser user)

这很好。我可以检查用户的属性并动态包含声明。

但是我想添加一个单独的“管理员”登录端点,以便用户可以决定是否希望在登录时拥有管理员经验。我可以传递有关当前会话的其他信息(例如登录URL或任何表单参数)添加到GenerateClaimsAsync方法?

1 个答案:

答案 0 :(得分:1)

要访问来自UserClaimsPrincipalFactory的请求信息,您可以像下面这样注册IHttpContextAccessor

    public class CustomUserClaimsPrincipalFactory<TUser> : UserClaimsPrincipalFactory<TUser> where TUser : class
{
    private readonly HttpContext _httpContext;
    public CustomUserClaimsPrincipalFactory(UserManager<TUser> userManager
        , IOptions<IdentityOptions> optionsAccessor
        ,IHttpContextAccessor httpContextAccessor) 
        : base(userManager, optionsAccessor)
    {
        _httpContext = httpContextAccessor.HttpContext;
    }
    protected override async Task<ClaimsIdentity> GenerateClaimsAsync(TUser user)
    {
        var ci = await base.GenerateClaimsAsync(user);
        ci.AddClaim(new Claim("RequestPath", _httpContext.Request.Path.Value));
        return ci;
    }
}
相关问题