gpt4 book ai didi

azure-active-directory - 如何为个人 Microsoft 帐户 (MSA) 实现代表 (OBO) 流程?

转载 作者:行者123 更新时间:2023-12-04 08:43:09 27 4
gpt4 key购买 nike

我有一个单页 Javascript 应用程序 (SPA)。我有一个使用 TypeScript/NodeJS 的中间层 Azure Function 服务。 SPA 允许用户登录并根据需要联系中间层服务以从 MS Graph 检索日历数据。然后,中间层需要能够代表用户再次定期检索该日历数据,而无需来自客户端的其他明确请求。

我需要同时支持 Azure AD 帐户个人 MSA 帐户。我为 SPA 注册了一个 AAD 应用程序,为中间层服务注册了一个。对于 Azure AD 帐户,这一切都“正常工作”,因为中间层从客户端接收访问 token ,将其交换为来自 AAD 的访问 token + 刷新 token ,然后使用它获取的访问 token 从 MS Graph API 检索数据通过使用它作为 OBO 流的一部分获得的刷新 token 定期刷新。

我知道,由于缺乏联契约(Contract)意,使用个人 MSA 帐户进行这项工作更具挑战性。关于如何与 MSA 一起工作,我能找到的唯一建议是 this page在“单个应用程序的使用”部分下。但是,我似乎无法完成这项工作。

如果我在调用 acquireTokenSilent(在 MSAL 库上)时更改我的 SPA 以请求我的中间层需要的所有相同范围(https://graph.microsoft.com/Calendars.Read openid profile email offline_access),正确的同意对话框会显示,但我得到的访问 token 不是智威汤逊。我知道这是可以预期的(因为 this page 顶部的“重要”说明),但是当我尝试使用我的中间层执行 OBO 流程时,这会导致问题。如果我获取该非 JWT 访问 token ,将其发送到我的中间层服务(现在使用与 SPA 相同的 AAD 应用程序注册来标识自己),然后尝试为 OBO 流调用 AAD 端点,我收到此错误:

AADSTS50027: JWT token is invalid or malformed.
Trace ID: a3647c0e-e7f5-4919-a457-1bd1e951f501
Correlation ID: a44f9292-1ba0-43b7-aafe-0a77e5adbc35
Timestamp: 2019-12-04 18:52:58Z

...所以显然期待 JWT。

有没有办法让这个 OBO 流程与个人 MSA 一起工作?或者,当使用带有需要刷新 token 的中间层的个人 MSA 时,此 OBO 流程不是正确的做法(因此它可以代表用户定期重新调用 MS Graph API)?如果这不是正确的做法,我的中间层如何才能获得有效的刷新 token ,以便它可以定期检索新的访问 token ?

注意:我已阅读 this所以发布,但它似乎没有解决我遇到的问题——我知道一个常见的 OBO 模式不能同时用于 AAD 和个人 MSA 帐户(令人沮丧),但我无法让任何个人 MSA OBO 流程正常工作,暂时忽略我可以在 Azure AD 和个人 MSA OBO 流之间共享多少代码(如果有的话)。

谢谢!

最佳答案

对于您所陈述的问题,如果前端能够成功获得 AAD 和 MSA 用户对 Graph 的同意,您可能不需要调用 OBO 来获得您想要的内容。

我建议您使用 MSAL 的 token 缓存功能来获取您在这里寻找的内容。

MSAL 提供了 cache tokens 的能力在外部,特别是在您的情况下是刷新 token 。提供了详细的演练 here .

AAD V2 允许将一个应用程序 ID 用于同一应用程序的多个实例,并且建议更是如此,尤其是当它们共享相同的拓扑部署单元时。

一旦您的应用的前端和后端具有相同的应用 ID。

  1. 为应用实现外部 token 缓存。
  2. 针对相同的 token 缓存初始化前端和后端。
  3. 确保前端获得所有必需范围的必要同意。
  4. 后端可以随时从缓存中获取已同意 用户的 AT。 MSAL 抽象了使用 RT 获取新 AT 的内部过程。这是可能的,因为应用 ID 相同。
  5. 如果您后端的 MSAL 失败(它会定期发生,例如当用户更改密码时),请将此事件保存在某处并建议用户再次在前端完成登录过程。

关于azure-active-directory - 如何为个人 Microsoft 帐户 (MSA) 实现代表 (OBO) 流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59184252/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com