2015-04-03 46 views
3

我正在處理單個頁面應用程序,該應用程序還需要脫機訪問Microsoft OneDrive。因此,我指導用戶使用代碼流方法對OneDrive進行身份驗證。OneDrive oAuth令牌請求獲取CORS錯誤

代碼被應用程序成功檢索到,但是當調用https://login.live.com/oauth20_token.srf時,請求失敗並顯示CORS錯誤。

請參閱附加圖像以查看來自我的javascript控制檯的HTTP標頭。從服務器的響應缺少頭

Access-Control-Allow-Origin:這會導致錯誤CORS

如何使我的應用程序訪問CORS?我在開發人員控制檯中看不到任何選項?

謝謝! enter image description here

回答

0

在收到access_token後,您應該可以使用CORS向CORBA發送已驗證的請求。從提供的HTTP標頭中看來,您需要再執行一次呼叫才能爲訪問令牌兌換代碼。你可能想看到http://onedrive.github.io/auth/msa_oauth.htm(第2步)。收到訪問令牌後,您需要在請求的「授權」標頭中添加訪問令牌。使用下面的CORS和響應頭的HTTP請求示例。我希望有所幫助。

var xhr = new XMLHttpRequest(); 
 
var oauthAccessToken = accessTokenStoredHere(); 
 
xhr.open('GET', 
 
    'https://api.onedrive.com/v1.0/drive/'); 
 
xhr.setRequestHeader('Authorization', 
 
    'Bearer ' + oauthAccessToken); 
 
xhr.send();

GET /v1.0/drive/ 
HTTP/1.1 
Authorization:Bearer YOUR_ACCESS_TOKEN 
Host:api.onedrive.com 
X-Target-URI:https://api.onedrive.com 
Connection:Keep-Alive 
+0

你好全勝的CORS錯誤發生敷在被訪問的鏈接時,我嘗試撥打電話贖回令牌。我能夠通過讓服務器發出令牌請求來解決此問題。 CORS問題仍然在於瀏覽器無法直接兌換令牌,因爲令牌服務器不會返回「Access-Control-Allow-Origin:」標頭 – user1936097 2015-04-08 11:46:39

+0

我相信OneDrive API支持CORS,但不支持OAuth服務。 – 2015-04-09 15:42:50

1

現在看來,有沒有辦法解決這個問題,但我發現開發商一個變通

如果您使用Chrome作爲瀏覽器,則可以下載this extension,並在嘗試進行身份驗證時啓用它。但是,我不認爲你想要求用戶下載這個擴展,因爲這有時會導致安全問題,並且在你使用其他站點時一直啓用它會導致錯誤(嘗試谷歌或Facebook,谷歌會簡單地崩潰該網站和Facebook會提示你有什麼問題)。

因此,您可能想嘗試其他流類型。代碼流似乎在除瀏覽器以外的其他平臺上工作。

0

CORS不支持代碼流。這是一個非常標準的OAuth 2實現。令牌流設計用於需要CORS的單頁應用程序/場景,並且令牌流與CORS一起工作。

如果您的應用運行時間超過訪問令牌的1小時有效期,則可以使用隱藏的IFRAME進行靜默重新驗證並獲取新的訪問令牌。有關更多詳細信息,請參見Authentication Scenarios for Azure AD

0

對於安全性問題,瀏覽器將阻止來自不同來源的請求,除非API負責啓用允許返回的回送服務器應答中的來源請求。 CORS配置是由API的所有者(服務器部分)完成的,在這種情況下它是Microsoft;不幸的是,除了阻止瀏覽器中的CORS感應,您不能更改此配置,這不是一個理想的解決方案,並且可能會導致安全風險,並且會推廣到所有通過重新配置的瀏覽器訪問的應用程序。

你應該通過你的服務器執行的請求,並從你的API

相關問題