小编Sti*_*tix的帖子

使用 Blazor Web 视图进行 Blazor 混合 (MAUI) 身份验证

我正在尝试构建一个小型 Blazor Maui 应用程序示例,该应用程序使用身份服务器对用户进行身份验证。我试图达到可以从 Maui 应用程序登录的程度,然后每当我使用 blazorWebview 组件时,都可以访问用户的身份验证状态以进行身份​​验证决策。

目前,我在 Maui 应用程序的 razor 组件中设置了身份服务器登录流程,这完成了登录流程。

现在我希望能够将该登录状态/主体信息传递到 Blazor Web 视图以在组件中使用(其中一些在外部类库中引用)。有人有幸这样做过吗?

(另外,我已按照此处的 Microsoft 文档实现我自己的自定义身份验证状态提供程序,并将其添加到依赖项注入中,但没有说明如何将身份验证信息传递到 Blazor Web 视图)。

blazor blazor-webassembly maui maui-blazor .net-maui

6
推荐指数
1
解决办法
2935
查看次数

使用 Asp.Net Core Identity 通过干净的架构进行授权和身份验证

我是第一次学习干净和垂直切片架构,如果我们使用 ASP.NET Core Identity,我很难理解授权和身份验证的适用范围。而且,在某些情况下,感觉将身份用户(使用用户名、密码、电子邮件等)与任何用户相关的域实体分开会很棘手。

例如,如果我们有一个使用 ASP.NET Core MVC、ASP.NET Core Identity 的解决方案,那么示例项目结构可能如下:

演示/WebUI 项目:

  • cshtml 视图/Razor 页面以及控制器(如果不使用 Razor 页面)将驻留在此处。
  • 该项目的program/startup.cs是可以调用其他层的扩展方法的地方:
app.services.InjectInfrastructure(); // same for application
Run Code Online (Sandbox Code Playgroud)

基础设施项目:

  • 应用层合约的实现。
  • 数据库上下文。
  • 如果您正在使用存储库,则可能是存储库的实现。

应用项目:

  • 命令/查询(假设使用 MassTransit.Mediator 或 MediatR 之类的东西)。
  • 验证器(例如使用流畅的验证)。

领域项目:

  • 领域实体(贫血或如果遵循 DDD,则使用方法)。
  • 任何聚合、值对象等(如果使用)。

因此,我们可以有一个具有以下流程的场景:

  1. 调用控制器操作来获取一些数据(表示应用程序层查询),该数据返回渲染的 html(cshtml 视图)。
  2. 数据填充在此 html 页面上,并将 POST 请求(表示应用程序层命令)发送到控制器操作。
  3. 命令或查询是使用 MediatR 发送的。
  4. 命令处理程序运行(使用 dbcontext 或存储库等数据访问),它会验证数据、对数据进行适当的更改并返回响应。
  5. 响应返回到控制器,然后控制器可以确定命令/查询是否成功
  6. 控制器重定向到另一个操作或填充 ModelState 错误。

我很难分离身份验证问题的情况是系统中的用户根据他们在登录时所做的选择具有不同的角色和权限。

例如,一个教育应用程序,教师可以选择他们当前代表的学校。在一所学校中,他们可能担任某种角色(例如校长),而在另一所学校中,他们可能担任特权较小的角色。

在这样的场景中,角色、应用程序用户(都是身份问题)似乎与域(将容纳不同的学校和每个学校拥有的角色)紧密耦合。

我的首要问题是,我们如何以干净的架构方式使用 ASP.NET 身份来实现这种身份验证/授权场景?

目前这种情况带来了多个问题:

  1. 如果我们要将身份验证/授权与表示层解耦,则不能依赖控制器上的 [Authorize(Role = "X")] [Authorize(Policy = "Y")] 装饰器,因为此逻辑应委托给基础设施(以确保如果我们想在任何时候交换表示层,我们不需要重写身份验证/授权)
  2. 此场景中的用户与域逻辑紧密耦合,因此只有在身份相关实体和域实体被压缩在单个 dbContext 中时我才能看到它工作

有没有人曾经遇到过/使用干净的架构实现过这样的系统?任何人对此有任何见解都会很棒!

asp.net-mvc asp.net-identity asp.net-core clean-architecture

5
推荐指数
0
解决办法
2089
查看次数