使用 JWT 授权检查 Asp.net 核心中的用户验证



我在我的 web API 中实现了Microsoft Identity 和 JWT, 客户端可以登录并获取 JWT 令牌并将其存储在应用程序中。 由于令牌过期,用户可以访问服务器, 但是如果我从数据库中删除用户,则已删除的用户仍然具有其令牌并且可以访问Web API, 如何检查用户的验证?

一种选择是在 JwtBearerEvent OnTokenVerified 事件上验证当前用户,该事件将在每次成功身份验证后触发

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options => {
options.Events = new JwtBearerEvents
{
OnTokenValidated = context =>
{
var userService = ServiceProvider.GetService<IUserService>();
if(userService.IsUserRemoved(context.Principal.Identity.Name))
context.Fail("User is removed");
return Task.CompletedTask;
}
};
});

注意:在这个例子中,我使用ServiceProvider来获取IUserService的一个实例,该实例作为参数存储在Startup.cs类中。初始化为 ConfigureServices 方法中的ServiceProvider = services.BuildServiceProvider();。IUserService 是一个包装类,您需要在其中实现 IsUserRemove 方法,该方法将在您的用户提供程序实现上运行。

另一种选择是实现并注册您自己的SecurityTokenValidator。为此,您需要创建一个ISecurityTokenValidator接口实现的类:

//using Microsoft.IdentityModel.Tokens
public class CustomValidator : ISecurityTokenValidator
{
//interface implementation
...
}

并通过JwtBearerOptions.SecurityTokenValidators属性将其注册为附加令牌验证器:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer( options => {
options.SecurityTokenValidators.Add(new CustomValidator()) 
});

相关内容

  • 没有找到相关文章