Google API OAuth 2.0 Titanium:缺少必需参数:response_type
Google API OAuth 2.0 Titanium: Required parameter is missing: response_type
我正在尝试从 Titanium 应用程序中的 Google 获取 access_token 以访问 Google+ API。
我已经在 Google API Console 中注册了一个 Android Oauth2.0 客户端
所以我有一个客户端 ID 和几个由 Google 生成的重定向 uris:["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 并使用附加查询字符串重定向到授权端点。 google 登录屏幕打开,我可以登录并授予对应用程序的访问权限。在 return 中,我得到一个 url,其中嵌入了授权代码,我可以提取它以用于下一次调用。
为了获得 access_token,我向“https://accounts.google.com/o/oauth2/v2/auth”端点发出了 POST 请求。这是函数:
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 specification 开始,访问令牌请求所需的参数只是 grant_type、代码、client_id 和 redirect_uri.我也尝试添加 response_type = "token" 但如果我理解正确的话,那应该是为了隐式流程。
有什么建议吗?
看来我发现了问题,令牌交换的端点不正确。
应该是“https://accounts.google.com/o/oauth2/token”,至少这个对我有用。
我要指出的是,在 Google 的最新文档中,令牌交换的端点是这个:“https://accounts.google.com/o/oauth2/v2/token”,但出于某种原因,它对我不起作用(响应说 url 不受服务器支持)。希望这可以帮助有类似问题的人。
我遇到了同样的问题,documentation 没有提到正确的 URL。
但是我注意到,当您注册客户端时,包含 client_id 和 client_secret 的 JSON 结果文件还包含 auth_uri 和 token_uri。
我希望这会对某人有所帮助:)
我已经尝试了此 post 中提到的所有 url,其中 none 在 2022 年有效。
我也看到当月3日写的文档在2022年5月28日已经有错误url
至少 17 天以来,我一直在尝试从这个 api return 数据中获取数据。
如果有人想一起解决这个问题,请告诉我。
我正在尝试从 Titanium 应用程序中的 Google 获取 access_token 以访问 Google+ API。 我已经在 Google API Console 中注册了一个 Android Oauth2.0 客户端 所以我有一个客户端 ID 和几个由 Google 生成的重定向 uris:["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 并使用附加查询字符串重定向到授权端点。 google 登录屏幕打开,我可以登录并授予对应用程序的访问权限。在 return 中,我得到一个 url,其中嵌入了授权代码,我可以提取它以用于下一次调用。
为了获得 access_token,我向“https://accounts.google.com/o/oauth2/v2/auth”端点发出了 POST 请求。这是函数:
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 specification 开始,访问令牌请求所需的参数只是 grant_type、代码、client_id 和 redirect_uri.我也尝试添加 response_type = "token" 但如果我理解正确的话,那应该是为了隐式流程。
有什么建议吗?
看来我发现了问题,令牌交换的端点不正确。 应该是“https://accounts.google.com/o/oauth2/token”,至少这个对我有用。
我要指出的是,在 Google 的最新文档中,令牌交换的端点是这个:“https://accounts.google.com/o/oauth2/v2/token”,但出于某种原因,它对我不起作用(响应说 url 不受服务器支持)。希望这可以帮助有类似问题的人。
我遇到了同样的问题,documentation 没有提到正确的 URL。 但是我注意到,当您注册客户端时,包含 client_id 和 client_secret 的 JSON 结果文件还包含 auth_uri 和 token_uri。
我希望这会对某人有所帮助:)
我已经尝试了此 post 中提到的所有 url,其中 none 在 2022 年有效。
我也看到当月3日写的文档在2022年5月28日已经有错误url
至少 17 天以来,我一直在尝试从这个 api return 数据中获取数据。
如果有人想一起解决这个问题,请告诉我。