【问题标题】:Missing Refresh Token for asynchronous processing缺少用于异步处理的刷新令牌
【发布时间】:2016-05-24 12:37:35
【问题描述】:

我们正在开发一个用于在 OneDrive for Business (ODFB) 之间传输文件的应用程序。 UI 是一个使用 Azure Active Directory 进行身份验证的 Web 应用程序,实际处理由 WebJob 异步完成:

客户端(一个 AAD 应用程序):
[JavaScript 应用程序]
服务器端(另一个 AAD 应用程序):
[Web API] [队列] [WebJob]

Web API 接收来自客户端应用的文件传输请求。请求被放入队列,由 WebJob 异步处理。

为此,WebJob 必须能够代表用户访问 ODFB,即;在向/从 ODFB 上传/下载文件时使用 Bearer-token。我们目前正在使用 OneDrive for Business API (https://{tenant}-my.sharepoint.com/_api/v2.0)。

之前,我们在传输请求旁边保存了一个刷新令牌(在客户端为服务器 AAD 应用程序颁发)——这样 WebJob 就能够通过调用来兑换刷新令牌以获取 ODFB 访问令牌。检查this链接 您可能已经注意到,客户端坐标是客户端应用程序,而不是服务器应用程序!这显然是错误的,但这是我们让它发挥作用的唯一方法。

我们当然不喜欢使用 Refresh Token ——但我们想不出任何其他方法让它发挥作用。自从我们升级到 ADAL 3.10 后,由于缺少刷新令牌,一切都停止了工作:-)

所以最大的问题是:我们如何重构解决方案以启用 WebJob 的异步处理?

任何指针将不胜感激。提前谢谢!

【问题讨论】:

    标签: azure oauth-2.0 azure-active-directory adal


    【解决方案1】:

    自从我们升级到 ADAL 3.10 后,由于以下原因,一切都停止了工作 缺少的刷新令牌:-)

    这是预期行为,因为 AD 团队从 ADAL 3.x 版本中删除了Refresh Token。请阅读 Vittorio 的博文:http://www.cloudidentity.com/blog/2015/08/13/adal-3-didnt-return-refresh-tokens-for-5-months-and-nobody-noticed/

    我建议从您的代码中删除对刷新令牌的依赖是前进的最佳方式。

    【讨论】:

    • 我们已经阅读了这篇文章,我们很想删除刷新令牌依赖 :-) 但是我们如何代表用户异步处理请求呢?我们可以存储一个也在客户端发布的访问令牌,但是一个访问令牌会在 60 分钟后过期,我们不能假设在此之前已经处理了该作业。还有其他可能的解决方案吗?
    • 只是想一想,难道不能在服务器端实现某种令牌缓存,让 ADAL 按需自动获取新的访问令牌吗?
    • 谢谢,高拉夫。我会给它一些想法,也许会尝试一下。我只是在想应该有一个更优雅的解决方案来解决这个问题:-)
    • 嗨@BrianHallkvist 我很想知道你是否为你的场景想出了一个优雅的解决方案?
    猜你喜欢
    • 1970-01-01
    • 2014-08-01
    • 2023-03-15
    • 2014-06-15
    • 2018-02-18
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多