2017-05-09 291 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仍然是一個謎。