AuthorizationHandler 和数据库依赖注入

AuthorizationHandler and database dependency injection

我们开发了一个基于身份认证的多租户应用。每个用户都会得到一个令牌会话,存储在数据库中,以判断用户是否仍然连接(有过期时间)。我将令牌(以及有关用户公司的其他信息)存储在用户 Claim 中。在身份检测到用户仍然连接(或未连接)之后,我需要检查用户令牌在我们的数据库中是否仍然有效(但前提是他已连接),所以我实现了 AuthorizationHandler.

public TokenValidHandler(MyDatabaseService service)
{
     // No information about the user connection string
}

protected override async void Handle(AuthorizationContext context, TokenValidRequirement requirement)
{
    // Check the token in database
}

然后我这样注册我的 Handler :

services.AddAuthorization(options =>
{
     options.AddPolicy("TokenValid",policy => policy.Requirements.Add(new TokenValidRequirement()));
});

 services.AddSingleton<IAuthorizationHandler, TokenValidHandler>();

因为我们有一个多租户应用程序,当用户退出应用程序并重新打开网站时,他的连接字符串丢失了(我们不想保留数据库字符串),所以我使用存储的信息在 Claim 中恢复数据库访问。如果身份验证过期,Claim 中没有可用信息,因此我无法访问我的数据库。

如我所见,即使用户未连接,TokenValidHandler 也会实例化,这正常吗?因为在他不在的情况下,我想为我的数据库服务使用依赖注入,我不能因为关于用户数据库访问的信息不在这里:身份没有足够快地检测到用户身份验证过期。对此有什么想法吗?

尝试将您的处理程序注册为作用域,您将在每个请求中获得一个新实例,这可能就是您想要的。