使用MS Identity Platform创建自己的AccessToken

问题描述

我正在扩展产品上的登录选项以支持MS Identity Platform,以便能够使用Azure AD登录(并以此获得SSO / MFA) 当前,我们正在使用.Net Core + JWT(JwtBearerDefaults.AuthenticationScheme) 环境是有角度的客户端,.Net Core APA和后端数据库

我可以进行设置了。

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

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

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

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

约束:

  • 我们无法创建/使用Azure声明。我们太多了,客户将管理Azure应用程序-在创建,添加删除我们每个软件版本的权限时。
  • Azure不了解角色/单位数据-每个客户的数据都不相同-因此信息也无法存储在Azure中。

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

我希望有人能给我一些反馈。

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

试图在此DrawIO图中概述以下流程。

Azure/API Auth flow

我希望在令牌领域有更多经验的人可以验证这是否可行?

最好的问候 /安德斯

解决方法

除了一件事之外,这是一种可行的方法。 请勿使用ID令牌进行授权。

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

Id令牌仅适用于请求身份验证的应用程序,并告知用户其元数据(如用户的显示名称等),但并不意味着授权任何内容。