Blazor AuthenticationStateProvider:如何通过 DI 获取 EF Core 中的 ClaimsPrincipal?

问题描述 投票:0回答:1

场景:我正在构建一个具有 Blazor 服务器前端、服务层和 EF Core 后端的应用程序。我使用 AzureAD w/Accounts 进行身份验证,并通过处理 IClaimsTransformation.TransformAsync 并在其中添加一些自定义逻辑来拦截备份过程中的身份验证堆栈。我已将审核字段添加到我的实体(CreatedBy、LastModifiedBy),并希望在 EF 层自动填充这些字段。

问题:我尝试将 AuthenticationStateProvider 注入到我的 DbContext 中,但是当用于检索状态时,它会出错,必须首先设置状态。我可以在 blazor“层”(由 App.razor 创建的身份验证“上下文”)中检索身份验证提供程序,当然它已被填充,但是发生了一些我不明白的魔法,而且我不确定我能得到数据从 blazor“上下文”到我的数据层的“外部”世界。当我写这篇文章时,我意识到我需要回到 MS 文档,因为答案很可能就在那里,我浏览了一下,但如果有人想插话,请插话!

当前烦人的解决方法:同时,我在 blazor 层中创建/更新实体时“手动”设置实体审核字段。

我也很沮丧,因为我无法将 AuthenticationStateProvider 添加为标签,b/c 我没有做出足够的贡献,但是好吧,是的,我明白了。

authentication dependency-injection entity-framework-core blazor audit
1个回答
0
投票

为什么要尝试在应用程序的基础设施层中执行此操作?它的目的是将数据保存到数据存储中并从数据存储中获取数据。它不应该修改数据。

如果您已经为应用程序构建了数据管道,那么您应该在管道内执行此操作。如果所有需要审核字段的数据对象都实现了

IRecordAudit
接口,您可以将模块插入管道中以检测实现所述接口的对象并添加相关字段。在管道中,您应该访问用户登录时填充的
AuthenticationState
或您自己的
UserService
。我假设您在登录之前无法执行 CUD 操作。

我在这里谈论的水平非常高,因为你的问题没有上下文,并且演示你将如何实现这一点远远超出了 SO 答案的范围。

PS - 为什么要添加

AuthenticationStateProvider
标签?太具体了。标签是像我这样的人监视的组。 Blazor 已经太多了。

© www.soinside.com 2019 - 2024. All rights reserved.