我正在处理单页应用程序,该应用程序还需要对Microsoft OneDrive进行脱机访问。因此,我指示用户使用代码流方法对OneDrive进行身份验证。
应用程序成功检索到代码,但是当调用https://login.live.com/oauth20_token.srf时,请求失败并出现CORS错误。
请参阅我的javascript控制台上的HTTP标头附件图片。服务器的响应缺少标题
Access-Control-Allow-Origin:
导致CORS错误
如何为我的应用启用CORS访问?我在开发者控制台中看不到任何选项?
谢谢!
答案 0 :(得分:1)
现在似乎没有办法解决这个问题,但我找到了解决方案的解决方案。
如果您使用Chrome作为浏览器,则可以下载this extension,并在尝试进行身份验证时启用它。但是,我认为您不想要求用户下载此扩展程序,因为这有时会导致安全问题,并且在您使用其他网站时一直启用它会导致错误(尝试Google或Facebook,Google会崩溃)网站,Facebook会提示你出错了。)
因此,您可能想尝试其他流类型。代码流似乎在浏览器以外的其他平台上运行。
答案 1 :(得分:0)
在收到access_token后,您应该可以使用CORS向OneDrive API发出经过身份验证的请求。从提供的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
答案 2 :(得分:0)
CORS不支持代码流。这是一个非常标准的OAuth 2实现。令牌流程设计用于需要CORS的单页面应用程序/场景,令牌流程适用于CORS。
如果您的应用运行时间长于访问令牌的1小时有效期,则可以使用隐藏的IFRAME静默重新进行身份验证并获取新的访问令牌。有关详细信息,请参阅Authentication Scenarios for Azure AD