【问题标题】:Azure AD / Microsoft Graph Tokens - What to use for a multi-client appAzure AD / Microsoft Graph 令牌 - 多客户端应用程序的用途
【发布时间】:2018-12-31 22:19:21
【问题描述】:

我需要能够通过后端在离线模式下监控用户的 Hotmail 或 Outlook 帐户。但是用户可以通过网络应用程序注册并授权帐户访问,例如Laravel 或 Lumen 或来自 Cordova 移动应用程序或其他 SPA 界面,如 Angular。基本上,该应用程序在https://apps.dev.microsoft.com 上配置为隐式流。

由于该应用需要后端离线处理,因此可以说一天几次 - 我需要一个刷新令牌来更新 access_token。有两种方法可以从 Azure AD 获得同意。

  1. authorize = id_token + token(但限制是 id_token 仅针对客户端)。这种方式更适合在客户端运行且用户在线时获取邮件。

  2. authorize = 代码,然后生成 access_token 和 refresh_token。

问题 - 选项 2 是否适用于 hotmail/outlook.com 和 O365?如果访问和刷新令牌由客户端生成 - 它们是否适用于用户帐户和电子邮件的在线和离线访问。

【问题讨论】:

  • option2 不是隐式授权流程,而是代码授权流程。虽然您可以通过此流程获得刷新令牌,但您还需要用户先登录。获得刷新令牌后,您可以使用它。它适用于 MSA 和 AAD 帐户。
  • @WayneYang-MSFT - 需要用户先登录是什么意思?根据您的评论,它将是 - 用户从移动应用程序注册。生成代码。代码用于获取访问和刷新令牌。刷新令牌存储在服务器端,例如拉拉维尔。然后,刷新令牌可用于 Laravel 服务器进行静默调用以获取新的访问令牌,并将其用于从 Hotmail 和 O365 获取用户的电子邮件。在客户端,访问令牌存储在本地存储中,如果过期,可以通过从服务器/laravel 获取刷新令牌来刷新。对吗?
  • 如果用户不发送退出请求,浏览器不会清除包含令牌信息的cookie。我不知道如果用户离线,您的用户是否会退出。如果他/她需要退出,cookie 将被清除。如果用户想要使用该应用程序,他/她需要重新登录。
  • 是的 - 我知道如果用户注销,他们将不得不重新登录。但不要重新授权,因为他们已经授权了该应用程序。对于 cordova 应用程序,不会有 cookie。相反,可以从用户的帐户中读取访问令牌。我主要担心的是能否在客户端和服务器上使用相同的新令牌进行刷新,并且能够同时访问 Hotmail 和 O365。从这个角度来看,我们似乎很好。感谢您的帮助。
  • 嗯.. 你的意思是要使用一个刷新令牌来为两个用户帐户获取两个访问令牌?

标签: oauth-2.0 azure-active-directory openid microsoft-graph-api


【解决方案1】:

当然可以。但是,如果您想在令牌响应中接收刷新令牌,您的应用必须请求并被授予 offline_acesss scope

offline_access scope 代表您的应用访问资源 用户的长时间。在工作帐户同意页面上, 此范围显示为“随时访问您的数据”权限。上 个人 Microsoft 帐户同意页面,它显示为“访问 您的信息随时”权限。当用户批准offline_access 范围内,您的应用可以从 v2.0 令牌接收刷新令牌 端点。刷新令牌是长期存在的。您的应用可以获得新的访问权限 旧令牌过期。

请求示例:

// 换行只是为了便于阅读

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&state=12345

其实,如果你使用code grant flow来登录AAD,你会看到这个Page:

如果您单击“是”,您将同意 offline_access 范围。注意:这适用于 MSA 和 AAD 帐户。

您可以在this documentation 中查看有关offline_access sope 的更多详细信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 2018-04-11
    • 2020-03-28
    • 1970-01-01
    相关资源
    最近更新 更多