c# - AuthorizationHandler 和数据库依赖注入(inject)

标签 c# asp.net-core asp.net-core-mvc asp.net-core-1.0 asp.net-identity-3

我们开发了一个基于身份验证的 Multi-Tenancy 应用程序。每个用户都会获得一个存储在数据库中的 token session ,以判断用户是否仍处于连接状态(有过期时间)。我将 token (以及有关用户公司的其他信息)存储在用户 Claim 中。在 Identity 检测到用户仍然连接(或未连接)之后,我需要检查用户 token 在我们的数据库中是否仍然有效(但前提是他已连接),因此我实现了 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
}

我像这样注册我的处理程序:

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

 services.AddSingleton<IAuthorizationHandler, TokenValidHandler>();

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

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

最佳答案

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

关于c# - AuthorizationHandler 和数据库依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36909687/

相关文章:

c# - 如何在读取或更新后关闭 MSI 文件

asp.net-core - SignalR .net 核心过滤器

c# - 使用 RemoteAuthenticationHandler CallbackPath 与 IApplicationBuilder 路径匹配

c# - 在 ASP.NET 5 MVC 6 中添加/创建模块化架构

c# - 缺少小数点分隔符

c# - WithRequired() 没有定义扩展方法

c# - 非托管内存泄漏

c# - 在 xamarin 中隐藏通知栏和标题栏

iis - ASP.NET 5 应用程序和 IIS 日志之间的客户端 IP 地址不一致

c# - 具有 asp-controller 和 asp-action 属性的 anchor 不会呈现为链接