【问题标题】:Requesting access token for second API which needs consent step为需要同意步骤的第二个 API 请求访问令牌
【发布时间】:2020-05-11 02:14:37
【问题描述】:

目前正在开发具有不同 API 调用的 React SPA。我最终得到了一个 User Experience API,它在后台处理对其他 API 的不同调用,它们的访问令牌是 UX APIoauth2/v2.0/token 端点请求的。该应用程序正在使用 OBO - 代表 - 以下文章中解释的流程:
Microsoft identity platform and OAuth 2.0 On-Behalf-Of flow.

对于我在 Azure 中托管的 Web 应用程序具有以下简化架构:

代码和问题:

所以在 UX API - 这是一个 Azure Function v2.0 - 我正在尝试获取正确的 访问令牌其他 Data 2 API - 参见上面的架构 - 基于上述 Microsoft 文档中解释的步骤。

解释场景:

  1. 首先用户打开应用程序,然后它需要同意UX API的授权,
  2. 然后在登录成功时访问令牌到达,可用于调用UX API
  3. UX API 中为 Data 2 API 请求访问令牌 - 请参阅下面的代码实现,
  4. 响应到达用户需要同意Data 2 API授权的地方。

请看下面似乎运行良好的代码实现:

const {authorization} = context.bindings.req.headers;
const config = {
   method: 'post',
   url: 'https://login.microsoftonline.com/<our-tenant-id>/oauth2/v2.0/token',
   headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
   data: qs.stringify({
      'scope': 'https://<data-2-api-resource-url>/access_as_user',
      'client_id': '<application client id>',
      'client_secret': '<app-client-secret>',
      'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer',
      'requested_token_use': 'on_behalf_of',
      'assertion': authorization.replace('Bearer ', '')
   }),
   httpsAgent: agent
};

const res = await axios(config);
const accessToken = res.data.access_token;

这会在后台引发以下异常

AADSTS65001:用户或管理员未同意使用 ID 为 '&lt;app-client-id&gt;' 且名为 '&lt;app-name&gt;' 的应用程序。为此用户和资源发送交互式授权请求。

问题:

当然,我正在处理 StackOverflow 中解释的类似问题,但我想这个问题与他们不同。他们只讨论了一层场景,并且正在解释错误消息的含义,看起来很清楚。

所以我的问题是我应该如何处理这种情况?我的猜测可能是错误的:

  1. 如果有效的访问令牌来自 UX API 则不需要进一步同意的应用程序的配置中不应以某种方式进行处理?
  2. 将交互窗口发回给用户以同意对 Data 2 API 的授权,这不会为最终用户带来出色的 UX。
  3. 以某种方式从代表更改整个授权流程?

不确定,感谢任何帮助!

【问题讨论】:

  • 在应用注册的公开API刀片中有授权应用部分。在那里,您可以指定哪些应用程序可以使用哪些范围。另一个可行的选择是 API 应用程序清单中的 knownClientApplications 数组。您可以在此处添加前端应用程序的客户端 ID 以进行同时同意。
  • @juunas 感谢您的回答,授权申请部门完成了这项工作,就像魅力一样!你想作为答案,所以我可以接受吗?谢谢!

标签: azure authentication oauth-2.0 microsoft-identity-platform


【解决方案1】:

很高兴看到这有效 - 你们俩都做得很好!允许用户登录一次然后访问多个相关资源是一种常见的要求。

上述解决方案感觉比让 UI 为每个资源执行静默重定向要好得多 - 由于使用 iframe,这对于 SPA 来说尤其困难。

【讨论】:

    【解决方案2】:

    在应用注册的公开 API 刀片中有授权应用部分。在那里,您可以指定哪些应用程序可以使用哪些范围。另一个可行的选择是 API 应用程序清单中的 knownClientApplications 数组。您可以在此处添加前端应用程序的客户端 ID 以进行同时同意。

    【讨论】:

    • 所以从我的架构中,我将 UX API 的应用程序(客户端)id 添加到 Data 2 APIAuthorized client应用程序 部分使其工作。那只是缺少的一块。感谢您的帮助!
    猜你喜欢
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-17
    • 2016-11-06
    • 2012-03-12
    • 2013-05-22
    • 2011-02-22
    相关资源
    最近更新 更多