我正在将Microsoft OneDrive支持添加到我的雇主向其他公司销售的产品中。当我进行设计和原型设计阶段时,我使用的是通过我使用个人帐户进行的应用程序注册获得的应用程序ID。现在,我正在努力将代码添加到我们的产品中,并使用通过我们的公司Office365帐户(通过其他人)完成的应用程序注册获得的应用程序ID。
我遇到这两个应用程序注册之间的身份验证查询结果有所不同。我正在努力追查原因,我希望有人可以提供帮助。
当我使用个人帐户中的注册时,我收到了Microsoft在线文档中记录的/token
网址中的所有数据项。当我切换到使用我们公司帐户的注册时,除了应用程序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"
}
以下是使用我们公司注册时的信息:
网址: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"
}
除了client_id
和code
的值之外,唯一不同的是应用程序注册(一个使用个人帐户,另一个使用公司Office365帐户)。可能是什么原因造成的?通过我们的公司账户注册是否有什么遗漏?
我无权查看公司注册信息,因此我无法比较他们所说的内容与个人注册时的内容。我向他们提供了所有相关信息,但我不知道他们是否做了我所要求的一切。
答案 0 :(得分:8)
Microsoft文档尚不清楚。他们的在线服务经历了多次迭代,这导致了相当多的残留数据。当我从Office365中撤消对这两个应用程序的访问权限并从头开始重新验证这两个应用程序时,两个调用都没有refresh_token
调用的响应中的/token
值。
我设法将Microsoft和OpenID文档中的各个部分放在一起以找到答案。在初始授权请求中,调用https://login.microsoftonline.com/common/oauth2/v2.0/authorize
,向offline_access
查询字符串参数添加scope
解决了问题。
在应用注册方面无需添加或更改任何内容。添加此新作用域后,还会向用户显示应用程序正在请求脱机访问数据。这一系列步骤打开refresh_token
值的返回。为什么它首先出现在那里,没有指定offline_access
仍然是个谜。
答案 1 :(得分:0)
2019更新
首先,由于有了ke4ktz(公认的答案),它运行得很好。
但是,我最初不知道如何向该范围添加offline_access :),因此,如果有人遇到相同的问题,只需将其添加到带空格的范围字符串之后,就可以说您的范围为“ Sites.FullControl.All”。 ”,因此现在为“ offline_access Sites.FullControl.All”。
可以找到Microsoft的参考here
我希望对您有帮助