【发布时间】: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