0

我正在扩展我们产品上的登录选项以支持 MS 身份平台,以便能够使用 Azure AD 登录(并获得 SSO/MFA) 目前我们正在使用 .Net Core + JWT (JwtBearerDefaults.AuthenticationScheme)环境是 Angular 客户端、.Net Core APA 和后端数据库。

我有设置工作。

我的挑战是,在我们的业务模型和后端数据库中,我们有大约 2.000 个用户权限和我们自己的用户/角色模型授予访问权限。

我目前正在从 MSAL 获取 IdToken,并在我的概念证明中使用 oid 将 Azure ID 与我们的用户模型耦合。

但是,在我们现有的 JWT 解决方案中,我们的访问令牌包含有关用户 ID、角色以及确定访问权限的另一个属性(单元/船舶)的声明。从这三个属性中,我们可以根据 API 端的 2.000 个用户权限来验证请求是否被允许。

我想将此信息(用户、角色、单位)保留在令牌中 - 但对如何保留有疑问。

约束:

  • 我们无法创建/使用 Azure 声明。我们有太多,客户将管理 Azure 应用程序——而我们为每个版本的软件创建、添加、删除权限。
  • Azure 不知道角色/单位数据 - 每个客户的这些数据都不同 - 因此信息也不能在 Azure 中。

下面概述了我的最佳想法 - 这种方法是否正确,并且符合分离 ID/Access 的方式?

我希望有人可以给我一些反馈。

我的想法是,Angular 客户端获取 Azure IDToken。然后我使用 Azure IDToken,调用我们的 API,它在服务器端验证 ID 令牌,然后授予我一个访问令牌,其中包含用户、角色和单位。这个令牌根本不是 Azure 的,只是我们的 API 生成的一个令牌——这也是唯一一个验证它的令牌)。Pro 对这种方法的看法是,无论 Azure 或我们自己的 API 提供哪种 IDToken,我都可以保留一种访问令牌。

试图在此 DrawIO 图中概述以下流程。 Azure/API 身份验证流程

我希望在 Token 领域有更多经验的人可以验证这是否是一种可行的方法?

最好的问候/安德斯

4

1 回答 1

0

这是一种可行的方法,除了一件事。 不要使用 Id 令牌进行授权。

您的前端应从AAD 为您的后端获取访问令牌。此访问令牌包含用户 objectId,允许您将用户映射到数据库中的用户。

Id 令牌仅适用于请求身份验证的应用程序,并告诉它用户的元数据,例如他们的显示名称等,但它不用于授权任何事情。

于 2020-09-14T06:26:46.010 回答