【问题标题】:.NET CORE - JWT Auth - is user valid/active?.NET CORE - JWT Auth - 用户是否有效/活跃?
【发布时间】:2019-01-09 02:28:18
【问题描述】:

我使用 jwt 令牌在我的应用程序上实现了一个身份验证系统。

services.AddAuthentication(options =>
    {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = _configuration["Jwt:Issuer"],
            ValidAudience = _configuration["Jwt:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuration["Jwt:Token"]))
        };
    });

services.AddAuthorization();

控制器:

[HttpGet("info"), Authorize]
public async Task<JsonResult> Get()
{
        return (await _userManager.FindByIdAsync(HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value));
}

而且运行良好!但是知道如果用户仍然有效和/或活跃,我想检查每个请求。 我不会添加策略,因为我想对每个请求进行此检查。你有什么想法?

尝试 1:

services.AddAuthorization(option =>
    option.DefaultPolicy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().AddRequirements( new ValidUserRequirement() ).Build()
);

#

public class ValidUserRequirement : IAuthorizationRequirement
{
    public ValidUserRequirement()
    {
    }
}

public class ValidUserHandler : AuthorizationHandler<ValidUserRequirement>
{
    private static IUserManager _userManager;

    public ValidUserHandler(IUserManager userManager)
    {
        _userManager = userManager;
    }

    protected override async Task HandleRequirementAsync(AuthorizationHandlerContext context, ValidUserRequirement requirement)
    {
        var userId = context.User.FindFirstValue( ClaimTypes.NameIdentifier );
        var user = await _userManager.GetUserAsync(userId);

        if(user != null)
        {
            context.Succeed(requirement);
        }
    }
}

但我的 ValidUserHandler 从未被调用,响应始终为 403。

【问题讨论】:

    标签: authentication .net-core jwt


    【解决方案1】:

    解决办法是把这个加到ConfigureService中:

    services.AddTransient<IAuthorizationHandler, ValidUserHandler>();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 2015-02-25
      • 2019-05-28
      • 2023-02-20
      • 2023-03-05
      相关资源
      最近更新 更多