【发布时间】:2020-08-14 00:01:31
【问题描述】:
我将覆盖 JwtBearerEvents.TokenValidated 以便将我的数据库中的用户与经过身份验证的用户(来自第 3 方身份验证服务 - 通过 JWT)进行匹配,然后填充一些自定义声明供我在我的 API 中使用(用户例如订阅级别)。
此代码从Startup.cs 触发,并为每个 API 请求调用。在TokenValidated 中,我尝试加载与令牌关联的用户,如果它们不存在,我会在数据库中创建一个用户。
但是,我的场景是客户端将对我的 API 发出多个请求,如果这是一个尚不存在的用户,API 会创建多个用户 - 每次并行调用 TokenValidated 时都会创建一个用户。
代码:
public class CustomJwtBearerEvents : JwtBearerEvents
{
private IUsersRepository _usersRepository;
public CustomJwtBearerEvents(IUsersRepository usersRepository)
{
this._usersRepository = usersRepository;
}
public override async Task TokenValidated(TokenValidatedContext context)
{
var subject = context.Principal.FindFirstValue("user_id");
var dbUser = await _usersRepository.GetOrCreateUser(subject, context.Principal);
// Populate custom claims
}
}
我确定我在处理这个错误,但我不确定如何最好地解决这个问题 - 所以这是我的问题:
我应该如何将第 3 方身份验证用户与我的数据库中的用户进行匹配,同时允许并发 API 请求?
【问题讨论】:
标签: .net .net-core oauth-2.0 jwt