Oauth 2.0 Azure AD/Microsoft Graph令牌-用于多客户端应用程序的内容

Oauth 2.0 Azure AD/Microsoft Graph令牌-用于多客户端应用程序的内容,oauth-2.0,azure-active-directory,openid,microsoft-graph-api,Oauth 2.0,Azure Active Directory,Openid,Microsoft Graph Api,我需要能够通过后端在脱机模式下监视用户的Hotmail或Outlook帐户。但用户可以通过web应用程序(如Laravel或Lumen)或Cordova移动应用程序或其他SPA界面(如Angular)注册并授权帐户访问。基本上,应用程序是为隐式流配置的 由于应用程序需要后端脱机处理,比如说一天几次-我需要一个刷新令牌来更新访问令牌。有两种方法可以获得Azure广告的同意 authorize=id\u token+token(但限制是id\u token仅是特定于客户端的)。这种方法更适合在客户端

我需要能够通过后端在脱机模式下监视用户的Hotmail或Outlook帐户。但用户可以通过web应用程序(如Laravel或Lumen)或Cordova移动应用程序或其他SPA界面(如Angular)注册并授权帐户访问。基本上,应用程序是为隐式流配置的

由于应用程序需要后端脱机处理,比如说一天几次-我需要一个刷新令牌来更新访问令牌。有两种方法可以获得Azure广告的同意

  • authorize=id\u token+token(但限制是id\u token仅是特定于客户端的)。这种方法更适合在客户端运行且用户在线时获取电子邮件

  • authorize=编码,然后生成访问令牌和刷新令牌


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

    当然可以。但是,如果您想在令牌响应中接收刷新令牌,您的应用程序必须请求并被授予
    脱机\u acesss范围

    允许您的应用程序代表访问资源 延长用户的使用时间。在工作账户同意页面上, 此范围显示为“随时访问数据”权限。在…上 在个人Microsoft帐户同意页中,它显示为“访问权限” 您的信息随时”的许可。当用户批准
    脱机访问时
    范围内,您的应用程序可以从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
    
    实际上,如果您使用代码授权流登录AAD,您将看到以下页面:

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


    您可以在中查看有关脱机访问的更多详细信息。

    当然可以。但是,如果您想在令牌响应中接收刷新令牌,您的应用程序必须请求并被授予
    脱机\u acesss范围

    允许您的应用程序代表访问资源 延长用户的使用时间。在工作账户同意页面上, 此范围显示为“随时访问数据”权限。在…上 在个人Microsoft帐户同意页中,它显示为“访问权限” 您的信息随时”的许可。当用户批准
    脱机访问时
    范围内,您的应用程序可以从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
    
    实际上,如果您使用代码授权流登录AAD,您将看到以下页面:

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


    您可以在中查看有关
    offline\u access
    sope的更多详细信息。

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