OAuth2 HTTPRequest CORS政策

时间:2019-06-05 13:04:58

标签: javascript

我正在使用OAuth2授权代码授予流程针对Strava API进行身份验证。第一步,我需要从Strava EndPoint检索访问代码。我处于开发模式。

我尝试了以下代码:

//unsure about redirect_uri, localhost and 127.0.0.1 are white-listed
var url = "https://www.strava.com/oauth/authorize";
var params ="client_id=*****&redirect_uri=127.0.0.1&response_type=code&scope=activity:write";
var request_url = url +"?"+ params;
var request = new XMLHttpRequest();

request.open('GET', request_url, true);

request.onreadystatechange = function()
{
    if(request.readyState == 4 && request.status == 200) {
    alert(http.responseText);
}
}
request.send(null);

这会遇到CORS错误,因为请求的资源上没有“ Access-Control-Allow-Origin”标头,因此请求已被阻止。因此,我需要添加标题。.因此,我已按照建议完成以下操作,以回答另一个问题,但仍然出现相同的错误。

request.setRequestHeader('Access-Control-Allow-Origin','*');

我想念什么?

1 个答案:

答案 0 :(得分:1)

Access-Control-Allow-Origin响应标头,而不是 request 标头。 www.strava.com的所有者需要应用它。

更重要的是,OAuth流程要求用户与OAuth授权端点托管的网页进行交互,因此您不能使用Ajax加载它,而是需要将主浏览器视图重定向到它(这使CORS无关紧要对于该过程的这一部分)。

请参见the documentation,其中指出:

  

重定向用户到GET https://www.strava.com/oauth/authorize

(我的重点)。

用户在浏览器中查看该页面后,他们会得到提示,询问他们是否要授予您的网站访问其帐户的权限(如果尚未登录,则会提示他们登录)。

This guide to OAuth可能会让事情变得更清楚。