Microsoft OAuth2身份验证不返回刷新令牌

ke4*_*ktz 5 oauth-2.0 onedrive

我正在为我的雇主向其他公司销售的产品添加Microsoft OneDrive支持.当我进行设计和原型设计阶段时,我使用的是通过我使用个人帐户进行的应用程序注册获得的应用程序ID.现在,我正在努力将代码添加到我们的产品中,并使用通过我们的公司Office365帐户(通过其他人)完成的应用程序注册获得的应用程序ID.

我遇到这两个应用程序注册之间的身份验证查询结果的差异.我正在努力追查原因,我希望有人可以提供帮助.

当我使用个人帐户中的注册时,我收到/token了Microsoft在线文档中记录的URL中的所有数据项.当我切换到使用我们公司帐户的注册时,除了应用程序ID之外的代码中没有任何更改,我没有得到该refresh_token值.我在两个测试中都使用相同的登录凭据.

以下是使用我的个人注册时的信息:

网址: https://login.microsoftonline.com/common/oauth2/v2.0/token

请求机构: grant_type=authorization_code&client_id={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}&code=XXXXXXXXXXXXXX...XXXXXXXXXXXXXXXX

请求回复:

{
  "token_type":"Bearer",
  "scope":"https://graph.microsoft.com/files.readwrite.all",
  "expires_in":3599,
  "ext_expires_in":0,
  "access_token":"XXXXXXXXXXXXXX...XXXXXXXXXXXXXXXX",
  "refresh_token":"XXXXXXXXXXXXXX...XXXXXXXXXXXXXXXX"
}
Run Code Online (Sandbox Code Playgroud)

以下是使用我们公司注册时的信息:

网址: https://login.microsoftonline.com/common/oauth2/v2.0/token

请求机构: grant_type=authorization_code&client_id={YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}&code=YYYYYYYYYYYYYY...YYYYYYYYYYYYYYY

请求回复:

{
  "token_type":"Bearer",
  "scope":"https://graph.microsoft.com/files.readwrite.all",
  "expires_in":3599,
  "ext_expires_in":0,
  "access_token":"YYYYYYYYYYYYYY...YYYYYYYYYYYYYYY"
}
Run Code Online (Sandbox Code Playgroud)

除了为价值观client_idcode,这是不同的仅仅是应用程序注册(一个使用使用公司Office365帐户个人帐户和其他).可能是什么原因造成的?通过我们的公司账户注册是否有什么遗漏?

我没有权限查看公司注册,所以我无法比较他们所说的与我个人注册时的内容.我给了他们所有相关的信息,但我不知道他们是否做了我要求的一切.

ke4*_*ktz 14

Microsoft文档尚不清楚.他们的在线服务经历了多次迭代,这导致了相当多的残留数据.当我从Office365中撤销对这两个应用程序的访问权限并从头开始重新验证这两个应用程序时,两个调用都没有refresh_token来自/token调用的响应中的值.

我设法将Microsoft和OpenID文档中的各个部分放在一起以找到答案.在初始授权请求中,调用https://login.microsoftonline.com/common/oauth2/v2.0/authorize,添加offline_accessscope查询字符串参数解决了问题.

在应用注册方面无需添加或更改任何内容.添加此新作用域后,还会向用户显示应用程序正在请求脱机访问数据.这一系列步骤打开了refresh_token值的返回.为什么它首先存在,没有具体说明offline_access仍然是一个谜.


Lea*_*ner 8

2019年更新

首先,感谢 ke4ktz(已接受的答案),效果很好。

但是,我最初不知道如何将 offline_access 添加到范围 :) 所以如果有人有同样的问题,你只需在你的范围字符串后面加上空格,所以假设你的范围是“Sites.FullControl.All”所以现在它将是“offline_access Sites.FullControl.All”。

可以在此处找到 Microsoft 的参考资料

我希望它有帮助