请求第二个 API 的访问令牌,需要同意步骤
Requesting access token for second API which needs consent step
目前正在开发具有不同 API 调用的 React SPA。我最终得到了一个 用户体验 API,它在后台处理对其他 API 的不同调用,它们的访问令牌 UX API 正在从 oauth2/v2.0/token
端点请求。该应用程序正在使用 OBO - 代表 - 在以下文章中解释的流程:
Microsoft identity platform and OAuth 2.0 On-Behalf-Of flow.
我的 Web 应用程序托管在 Azure 中,具有以下简化 架构:
代码和问题:
所以在 UX API - 这是一个 Azure Function v2.0 - 我试图得到其他 Data 2 API 的正确 access token - 参见上面的架构 - 基于上述 Microsoft 文档中解释的步骤.
场景说明:
- 首先用户打开应用程序然后它需要同意 UX API,
的授权
- 然后在成功登录访问令牌到达可用于调用 UX API,
- 在 UX API 中请求 Data 2 API 的访问令牌 - 请参阅下面的代码实现,
- 响应到达用户需要就 数据 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: The user or administrator has not consented to use the application with ID '<app-client-id>'
named '<app-name>'
. Send an interactive authorization request for this user and resource.
问题:
当然,我在 Whosebug 中解决了类似的问题,但我想这个问题与它们不同。他们只在谈论一层场景,而那些正在解释错误消息的含义,看起来很清楚。
所以我的问题是我应该如何处理这种情况?我下面的猜测可能是错误的:
- 如果有效的访问令牌来自 UX API,则不应在应用配置中以某种方式处理,那么不需要进一步同意?
- 将交互 window 发回给用户,以同意对 Data 2 API 的授权,这最终不会产生很好的用户体验用户。
- 以某种方式更改整个授权流程?
不确定,非常感谢您的帮助!
在应用程序注册的 Expose an API 边栏选项卡中有授权应用程序部分。您可以在那里指定哪些应用程序可以使用哪些范围。另一个可能有效的选择是 API 应用清单中的 knownClientApplications 数组。您可以在那里添加前端应用程序的客户端 ID 以同时同意。
很高兴看到这有效 - 你们俩都很棒!允许用户登录一次然后访问多个相关资源是一个常见的需求。
上述解决方案感觉比让 UI 对每个资源进行静默重定向要好得多 - 由于使用 iframe,这对于 SPA 来说尤其困难。
目前正在开发具有不同 API 调用的 React SPA。我最终得到了一个 用户体验 API,它在后台处理对其他 API 的不同调用,它们的访问令牌 UX API 正在从 oauth2/v2.0/token
端点请求。该应用程序正在使用 OBO - 代表 - 在以下文章中解释的流程:
Microsoft identity platform and OAuth 2.0 On-Behalf-Of flow.
我的 Web 应用程序托管在 Azure 中,具有以下简化 架构:
代码和问题:
所以在 UX API - 这是一个 Azure Function v2.0 - 我试图得到其他 Data 2 API 的正确 access token - 参见上面的架构 - 基于上述 Microsoft 文档中解释的步骤.
场景说明:
- 首先用户打开应用程序然后它需要同意 UX API, 的授权
- 然后在成功登录访问令牌到达可用于调用 UX API,
- 在 UX API 中请求 Data 2 API 的访问令牌 - 请参阅下面的代码实现,
- 响应到达用户需要就 数据 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: The user or administrator has not consented to use the application with ID
'<app-client-id>'
named'<app-name>'
. Send an interactive authorization request for this user and resource.
问题:
当然,我在 Whosebug 中解决了类似的问题,但我想这个问题与它们不同。他们只在谈论一层场景,而那些正在解释错误消息的含义,看起来很清楚。
所以我的问题是我应该如何处理这种情况?我下面的猜测可能是错误的:
- 如果有效的访问令牌来自 UX API,则不应在应用配置中以某种方式处理,那么不需要进一步同意?
- 将交互 window 发回给用户,以同意对 Data 2 API 的授权,这最终不会产生很好的用户体验用户。
- 以某种方式更改整个授权流程?
不确定,非常感谢您的帮助!
在应用程序注册的 Expose an API 边栏选项卡中有授权应用程序部分。您可以在那里指定哪些应用程序可以使用哪些范围。另一个可能有效的选择是 API 应用清单中的 knownClientApplications 数组。您可以在那里添加前端应用程序的客户端 ID 以同时同意。
很高兴看到这有效 - 你们俩都很棒!允许用户登录一次然后访问多个相关资源是一个常见的需求。
上述解决方案感觉比让 UI 对每个资源进行静默重定向要好得多 - 由于使用 iframe,这对于 SPA 来说尤其困难。