使用纯Javascript或JQuery的Google OAuth 2访问令牌

使用纯Javascript或JQuery的Google OAuth 2访问令牌,javascript,ajax,google-api,google-oauth,google-api-client,Javascript,Ajax,Google Api,Google Oauth,Google Api Client,我正在测试GoogleOAuth2.0。我有我的客户ID、客户机密和身份验证码。现在我想获得一个访问和刷新令牌 然而,我可以从PHP中实现这一点。但是在使用Javascript时获取无效授权错误 函数getAccessToken(){ $.ajax({ 键入:“POST”, url:“https://accounts.google.com/o/oauth2/token", contentType:'application/x-www-form-urlencoded', 数据类型:“json”,

我正在测试GoogleOAuth2.0。我有我的客户ID、客户机密和身份验证码。现在我想获得一个访问和刷新令牌

然而,我可以从PHP中实现这一点。但是在使用Javascript时获取无效授权错误


函数getAccessToken(){
$.ajax({
键入:“POST”,
url:“https://accounts.google.com/o/oauth2/token",
contentType:'application/x-www-form-urlencoded',
数据类型:“json”,
数据:{
客户id:“我的客户id”,
客户的秘密:“我的秘密”,
代码:“我的身份验证代码”,
重定向_uri:'http://localhost:8888/google-api.html',
授权类型:“授权代码”
},
成功:功能(数据){
$('#response').html(数据);
},
错误:函数(e){
$('#response').html(e.responseText);
}
});
}
基本上,我正在尝试将下面的PHP Curl POST请求转换为Ajax

$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,”https://accounts.google.com/o/oauth2/token");
curl_setopt($ch,CURLOPT_POST,TRUE);
curl_setopt($ch,CURLOPT_HTTPHEADER,['内容类型:application/x-www-form-urlencoded']);
curl\u setopt($ch,CURLOPT\u POSTFIELDS,http\u build\u query([
“代码”=>$code,
“客户id”=>$client\u id,
“客户机密”=>$client\u secret,
'redirect_uri'=>$redirect_uri,
“授权类型”=>“授权代码”,
]));
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
$response=curl\u exec($ch);
卷曲关闭($ch);

注意:stack overflow中类似类型的问题有很多视图,但仍然没有答案。天才开发人员很乐意为您提供意见。我也被困了3天。

多亏了@Tankaike。这个问题在StackOverflow中被问了3-4次,没有人认真回答

初学者!!!需要注意的一点是:身份验证代码只工作一次(:)要获取新的访问令牌,请使用从第一个响应中获得的刷新令牌

        $.ajax({
            type: 'POST',
            url: "https://accounts.google.com/o/oauth2/token",
            contentType: 'application/x-www-form-urlencoded; charset=utf-8',
            crossDomain:true,
            cache : true, 
            dataType: 'json',
            data: {
                client_id: client_id,
                client_secret: client_secret,
                code: code,
                redirect_uri: redirect_uri,
                grant_type: grant_type,
            },

            success: function (data) {
                $('#response').html(JSON.stringify(data, null, " "));;
            },
            error: function (e) {
                $('#response').html(e.responseText);
            }
        });

我认为Javascript的请求是有效的。那么,通过重新授权作用域来使用新代码怎么样?当代码无法使用时,会发生此类错误。该代码只能使用一次。请小心这个。另外,如何修改
$('#response').html(数据)
$('#response').html(JSON.stringify(data,null,”)?但我不确定关于你情况的详细信息。因此,如果这不是直接的解决方案,我道歉。我尝试创建新的客户端、密码和身份验证代码,但没有成功。你自己试过吗?在你的情况下有效吗?我认为存在一些问题,因为ajax不能与重定向一起工作。但不确定。谢谢您的回复。在我确认脚本通过在脚本请求中设置变量
client\u id
client\u secret
code
redirect\u uri
工作后,我评论说。但我很抱歉,我的评论对你的情况没有帮助。例如,使用
fetch
而不是
ajax
?@Tanaike非常感谢。你在2分钟内解决了我的问题。三天后它就开始工作了。我缺少的是愚蠢的
html(JSON.stringify(data,null,”)。当我第一次单击时,它没有显示结果,我在不知不觉中跳过了它,验证代码变得无效。谢谢您的回复。我很高兴你的问题解决了。