【发布时间】:2017-05-04 15:43:57
【问题描述】:
背景
我们有一项功能,可以使用here 概述的 Office365 REST api 在我们的应用程序和 Office365 之间同步日历条目和联系人。我们正在使用 API 的版本 1。对于授权,我们通过 Azure AD 执行授权,大纲为here。
问题
在正常情况下(使用直接从 Microsoft 购买的 Office365 帐户时),我们的系统按预期工作:我们能够在用户令牌过期时刷新它们,并返回一个新的访问和刷新令牌作为交换。
在第二种情况下,当使用 Office365 帐户purchased via GoDaddy 进行测试时,我们遇到了可以在这一系列步骤中概述的阻塞问题: 1.用户是从我们的应用程序-> Office365登录页面发送的。 2. 用户输入电子邮件地址 3. 用户被重定向到 GoDaddy Office365 登录页面。 4. 用户完成授权,并在响应中使用访问代码重定向回我们的应用程序。 5. 应用程序从 Office365 交换 access_token 和 refresh_token 的访问代码。 6.一段时间过去了,access_token过期了 7. App使用refresh_token刷新用户的access_token
预期行为
此时,我们希望收到一个新的 access_token 和一个新的 refresh_token,就像我们在使用常规 Office365 帐户时所做的那样
实际行为
仅对于通过 GoDaddy 购买的帐户,我们不会在第一次刷新后的响应中收到新的刷新令牌。
显然,当打算进行长时间运行的同步时,这是一个突破性案例,因为用户将无法再刷新他们的令牌。
Postman 跟踪(可以保存为 .json 并导入 Postman 进行调试 https://gist.github.com/drunkel/7ec66ed33f66d0070148694651699d03(ID 和机密已被删除)
问题:
- 这是一个已知问题吗?
- 有解决方法吗?
【问题讨论】:
-
是否有详细的错误信息显示第一次刷新后响应中为什么没有收到新的刷新令牌。还是只获取访问令牌但刷新后没有返回刷新令牌?
-
@NanYu-MSFT 没有消息,只有正常响应,没有任何刷新令牌。一个“坏”的响应看起来像这样:gist.github.com/drunkel/bf9fd7c8b9f69c5a03b0eb364a629262
-
+100 解决这个问题,请 GoDaddy。
-
我不熟悉 GoDaddy 的 Office365 设置,但用户如何从 Office 365 重定向到 GoDaddy Office 365?他们是否两次登录 Office 365?如果是这样,是否最初收到的“refresh_token”是用于第一次登录,但第二次登录使其无效?反之亦然,“refresh_token”用于辅助登录,但 Office 365 Auth 仅识别第一个?
-
嘿,这是一个有趣的问题,我想进一步研究。 @drunkel 当您将刷新令牌换成新令牌时,您可以尝试从请求中获取
correlation_id吗?您可以使用 fiddler 之类的网络跟踪工具来找到它。
标签: azure oauth office365 azure-active-directory office365api