目前正在开发具有不同 API 调用的React SPA。我最终拥有了一个用户体验 API ,它使用UX API从oauth2/v2.0/token
端点请求的访问令牌在后台处理对其他 API 的不同调用。该应用程序正在使用以下文章中解释的OBO(代表)流:
Microsoft 身份平台和 OAuth 2.0 On-Behalf-Of 流。
我在Azure中托管的 Web 应用程序具有以下简化架构:
代码和问题:
因此,在UX API(这是一个Azure Function v2.0)中,我正在尝试获取其他Data 2 API的正确访问令牌(参见上面的体系结构),基于上述 Microsoft 文档中解释的步骤。
解释场景:
- 首先用户打开应用程序,然后它需要同意UX API的授权,
- 然后在成功登录访问令牌到达可用于调用UX API,
- 在为Data 2 API请求访问令牌的UX API中- 请参阅下面的代码实现,
- 响应到达用户需要同意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
'<app-client-id>'
名为的应用程序'<app-name>'
。为此用户和资源发送交互式授权请求。
问题:
当然,我正在处理StackOverflow中解释的类似问题,但我想这个问题与他们不同。他们只谈论一层场景,并且正在解释错误消息的含义,看起来很清楚。
所以我的问题是我应该如何处理这种情况?我的猜测可能是错误的:
- 不应该在应用程序的配置中以某种方式处理,如果有效的访问令牌来自UX API,那么不需要进一步的同意?
- 将交互窗口发送回用户以同意Data 2 API的授权,这不会为最终用户带来出色的 UX。
- 以某种方式从代表更改整个授权流程?
不确定,我感谢任何帮助!