0

我在 Azure 中有两个应用注册:

  1. 一个客户端应用程序 (Web),它可以发出 id 和访问令牌,并添加了 API 的所有范围。
  2. 一个了解 Web 应用程序并向其公开一些范围的 API 注册。

在 API 注册清单中,我定义了一些用户角色。这些角色分配给相应企业应用程序中的用户。
由 Web 应用程序发布的该 API 的所有访问令牌都包含这些角色,并且我的 API 可以通过这种方式进行授权。
但是我的 SPA 只有不知道这些角色的 id 令牌。
我解决这个问题的方法是:

  1. 我可以让我的 SPA 解析访问令牌并提取角色。但是 MS 不建议这样做,所以我不想这样做 - 即使它会起作用。
  2. 我还可以将访问令牌发送到一个 API 端点,它可以解析令牌并为我返回角色。这已经更好了,但我仍然不喜欢这种方法。

是否有可能在 Web 应用程序发布的 ID 令牌中包含来自 API 的角色?如果我将角色放在 Web 应用程序本身的清单中,这些角色就会出现在 ID 令牌中。
但我不想在 API 和 Web 应用程序清单中扮演多余的角色。
什么是解决我的问题的合适方法?

最好将所有 API 角色也包含在 Web 应用程序发布的 ID 令牌中。但我找不到任何办法这样做......

4

1 回答 1

1

您遇到的是 OAuth 架构中的 2 个数据源,您的 UI 和 API 通常需要使用这两种类型:

  • 通用中央数据,例如用户 ID、姓名、电子邮件、范围
  • 应用程序特定数据,例如角色、偏好、授权规则

在大多数情况下,上述方法的选项 2 是迄今为止的首选方法:

  • UI 将访问令牌发送到 API 端点,例如 GET /api/userclaims
  • API 可以返回 UI 需要的任何声明
  • 对于多个 UI 和 API,随着时间的推移很容易更改

在您的 API 中使用声明是将两个用户数据源绑定在一起的方法,而无需将所有声明放入令牌中。我的几篇博客文章进一步探讨了这个主题:

于 2020-06-07T19:59:06.793 回答