2

我们目前正在开发一个具有以下架构的 Web 应用程序。

  • 基于 Angular 7 的单页应用程序
  • 基于 .NET Core WebAPI 的后端。

我目前正在考虑涵盖此类应用程序的身份验证和授权要求的最佳实践。

客户端授权

  • SPA 登录后采用 JWT。
  • 路由的授权将由 Angular 中的路由保护处理。例如,用户具有reportviewer角色,用户将被允许查看与报表相关的组件的路由。
  • 菜单项将根据 JWT 上的信息可见。例如,用户具有reportviewer 角色,用户将看到与报表相关的菜单项。

服务器端

JWT 将包含一些授权信息。(例如角色声明)授权属性将用于 WebAPI 的授权。

我开发了一个用户编辑页面来定义用户并分配所需的角色。

问题

开发人员可能会不一致地定义菜单项、路由保护和 WebAPI 的授权。我如何构建一致的授权框架来解决这种应用程序的这个问题?

提前致谢。

依山

4

2 回答 2

0

你的问题很好:

我如何构建一致的授权框架来解决这种应用程序的这个问题?

答案是依赖外部授权框架。有几种选择可以实现这一目标。有些是 .NET 特定的,有些是通用的。

总的来说,这个字段被称为基于属性的访问控制 (ABAC)。ABAC 给你的是:

  • 架构
  • 用于表达您的授权的政策语言(例如“经理可以查看其部门中的文档”)
  • 发送许可/拒绝授权请求的请求/响应协议。

ABAC架构

ABAC / XACML 架构和流程

这张图片突出了 ABAC 的工作原理:您有一个拦截器或执行点 (PEP) 的概念,它拦截用户和应用程序之间的流。这个执行点将检查用户是否可以访问他们想要访问的任何内容(数据、API 调用、小部件......)。这个想法是 PEP 是您所保护的本地的,但决策是集中的,这将为您提供一致的授权。您可以为 SPA 和 API 设置 PEP……而且它们可以始终如一地执行相同的授权策略。

PDP 或策略决策点是处理授权请求并根据您之前编写的一组策略评估它们的一个。编写的语言策略通常是

PIP(策略信息点)是您的数据源和用户目录(AD、DB...)的抽象表示,您可以在其中存储有关用户和资源的其他信息。它们有助于做出正确的决定。

选项

您可以选择开源实现,例如 AuthZForce,也可以选择商业实现,例如Axiomatics(我工作的地方)。.NET Core 还具有基于策略的授权,但这对您的 SPA 没有帮助。

于 2019-04-12T16:08:17.880 回答
0

您可以在 ASP.NET Core 中使用基于策略的授权

Dino Esposito 在此处描述了用法:https ://docs.microsoft.com/en-us/archive/msdn-magazine/2017/october/cutting-edge-policy-based-authorization-in-asp-net-核

于 2019-11-14T15:09:30.933 回答