【发布时间】:2020-05-01 19:17:03
【问题描述】:
在我的服务器端 Blazor 应用程序中,身份验证是以非常规的方式处理的。本质上,当用户访问该页面时,他们会使用其 Windows 凭据进行身份验证。此时,将创建一个自定义策略以在外部数据库 (Informix) 中查找该用户名,在该数据库中可以找到该用户在应用程序中的授权。特别是对于应用程序中的每个授权级别(可以更新、转到此页面等),我正在创建一个新声明以根据存储在数据库中的权限添加到当前用户。
通常在视图中,我只使用AuthenticationStateProvider 来获取此信息,并且它可以正常工作。但是,当我需要访问处理更新/业务逻辑的服务类中的用户信息时,我似乎根本无法访问声明/用户。例如,一个用例是根据在初始身份验证期间添加的声明来获取当前 Windows 帐户的数据库中存储的用户名,以记录他们的活动/跟踪。另一个是从数据库中获取当前登录用户的全名。
我已经在带有身份验证状态提供程序和HTTPContext 的服务类中尝试了 DI,但它们都不起作用。我知道整体结构并不理想,但这是我必须使用的。
任何有关如何解决此问题的见解将不胜感激!
【问题讨论】:
-
您可以定义一个带有AuthenticationStateProvider类型参数的构造函数的服务类,并将该服务添加到DI容器中。我不明白这里有什么问题。
-
@enet 感谢您为我指明了正确的方向......我能够这样做,但我必须将我的服务实例更改为范围而不是单例......我下面的答案中的详细信息。
标签: c# authentication .net-core blazor