2017-05-09 101 views
2

我正在将Microsoft OneDrive支持添加到我的雇主向其他公司销售的产品中。当我经历了我的设计和原型阶段时,我使用的应用程序ID通过应用程序注册获得,我使用了我的个人帐户。现在,我正在努力将代码实际添加到我们的产品中,并使用通过我们公司Office365帐户完成(由其他人完成)的应用程序注册获得的应用程序ID。Microsoft OAuth2身份验证不返回刷新令牌

我在这两个应用程序注册之间的身份验证结果中遇到不同。我试图找出原因,我希望有人在这里可以提供帮助。

当我从我的个人帐户使用注册时,我收到了来自/token url的所有数据项,这些数据项都记录在Microsoft联机文档中。当我切换到使用我们公司帐户的注册时,除了应用程序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_idcode,即不同的唯一事情的值是应用程序注册(一个使用个人帐户和使用公司Office365帐户的其他帐户)。这可能是什么原因?通过我们的公司帐户注册是否有缺失?

我没有查看公司注册的权限,所以我无法比较他们把它和我在我的个人注册中的对比。我给了他们所有相关的信息,但我不知道他们是否做了我所要求的一切。

回答

3

Microsoft文档还不太清楚。他们的在线服务经历了很多次迭代,这导致了相当多的残留数据。当我从Office365内撤销对这两个应用程序的访问并从头重新验证这两个应用程序时,两个呼叫在/token呼叫的响应中都没有refresh_token值。

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

无需在应用程序注册端添加或更改任何内容。添加新范围时,用户还将看到应用程序正在请求访问数据。这一系列步骤打开refresh_token值的返回。为什么它在那里首先,没有指定offline_access仍然是一个谜。