Google API OAuth 2.0 Titanium:缺少必需的参数:response_type



我试图从谷歌获得一个access_token在钛应用程序访问Google+ API。我在Google API控制台注册了Android Oauth2.0客户端所以我有一个客户端ID和谷歌生成的几个重定向uri: ["urn:ietf:wg:oauth:2.0:oob","http://localhost"]。我正在尝试遵循授权代码流程,因此我向端点"https://accounts.google.com/o/oauth2/v2/auth"发出了授权请求;使用以下参数作为查询字符串:

client_id = encodeURI(<app id>)
redirect_uri = encodeURI("urn:ietf:wg:oauth:2.0:oob")
response_type = "code",
state = <random generated number>
scope = "https://www.googleapis.com/auth/plus.me"

然后我创建一个webview,用附加的查询字符串重定向到授权端点。谷歌登录屏幕打开,我可以登录并授予访问该应用程序。作为回报,我得到一个嵌入授权代码的url,我可以提取用于下一次调用。

为了获得access_token,我向"https://accounts.google.com/o/oauth2/v2/auth"端点。下面是函数:

function getAccessToken(code) {
Ti.API.warn("Authorization code: " + code);
    
var auth_data = {
    code : code,
    client_id : client_id,
    redirect_uri : redirect_uri,
    grant_type : "authorization_code",
};

var client = Ti.Network.createHTTPClient({
    
    onload: function() {
        var response_data = JSON.parse(this.responseText);
        var access_token = response_data["access_token"];
        var expires_in = response_data["expires_in"];
    },
    
    
    onerror: function() {
        Ti.API.error("HTTPClient: an error occurred.");
        Ti.API.error(this.responseText);
    }
    
});
var body = "";
    
for (var key in auth_data) {
    if (body.length) {
        body += "&";
    }
    body += key + "=";
    body += encodeURIComponent(auth_data[key]);
}
client.open("POST", "https://accounts.google.com/o/oauth2/v2/auth");
client.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
client.send(body);

}

但我得到的状态码为400,有以下消息:"所需参数缺失:response_type"

我不知道为什么我得到这个,因为从OAuth 2.0规范访问令牌请求所需的参数只是grant_type, code, client_id和redirect_uri。我还尝试添加response_type = "token"但如果我理解正确的话,这应该是针对隐式流的。

任何建议吗?

我遇到过同样的问题,文档没有提到正确的URL。但是我注意到,当您注册客户端时,包含client_id和client_secret的JSON结果文件也包含auth_uri和token_uri。

希望对大家有所帮助

似乎我发现了问题,令牌交换的端点不正确。它应该是"https://accounts.google.com/o/oauth2/token",至少这个对我有用。

我要指出的是,在Google的最新文档中,令牌交换的端点是这个:"https://accounts.google.com/o/oauth2/v2/token",但由于某种原因,它不适合我(响应说服务器不支持该url)。

相关内容

  • 没有找到相关文章

最新更新