GoogleOAuth2使用Android生成的一次性代码,但不使用JSSDK生成的代码
我正在尝试使用来自Google的OAuth2API对用户进行身份验证。有两个平台,Android和Web。对于新用户,我在客户端获取一次性身份验证代码,并将其发送到两个平台上的服务器。一旦服务器收到代码,它将获取访问令牌,然后获取用户详细信息。服务器能够从Android设备发送的一次性身份验证代码中获取令牌,但从Web发送的代码失败 这是我在JS中获取一次性身份验证代码的代码片段GoogleOAuth2使用Android生成的一次性代码,但不使用JSSDK生成的代码,android,authentication,google-oauth,Android,Authentication,Google Oauth,我正在尝试使用来自Google的OAuth2API对用户进行身份验证。有两个平台,Android和Web。对于新用户,我在客户端获取一次性身份验证代码,并将其发送到两个平台上的服务器。一旦服务器收到代码,它将获取访问令牌,然后获取用户详细信息。服务器能够从Android设备发送的一次性身份验证代码中获取令牌,但从Web发送的代码失败 这是我在JS中获取一次性身份验证代码的代码片段 gauth2.grantOfflineAccess({ 'scope': 'profile emai
gauth2.grantOfflineAccess({
'scope': 'profile email',
'redirect_uri': 'postmessage'
}).then(function(e){
if(!e){
// Error
}
else{
console.log('Auth code: '+e.code);
}
});
在服务器端,这是我正在执行的POST请求,用于从一次性代码中获取令牌
post_data = {'code': one_time_code, 'client_id': settings.GOOGLE_OAUTH2_CLIENT_ID, 'client_secret': settings.GOOGLE_OAUTH2_CLIENT_SECRET, 'grant_type': 'authorization_code'}
req = urllib2.Request("https://www.googleapis.com/oauth2/v3/token", data=urllib.urlencode(post_data), headers={'User-Agent': 'Mozilla/5.0'})
req.get_method = lambda: 'POST'
res = urllib2.urlopen(req)
if res.code == 200:
print "response 200 : "
else:
print "Access Token Validation Return Code: ", res.code
当从Android生成身份验证代码时,此web服务调用返回200和令牌。从web发送时,相同的方法会引发以下错误
错误:400,请求无效;缺少参数“重定向\u uri”
在本例中,我不需要发送任何重定向uri,因为我正在读取那里的响应本身。但我仍然尝试设置一个空值,并尝试将其设置为与google开发者控制台中的某个值完全匹配的值。如果是那样的话,我还是
错误:400,请求无效;重定向uri不匹配
我无法理解这样一个事实,即这个web服务调用对于android代码而不是web代码是完美的。请注意,Android应用程序和Web应用程序的作用域不同。但是,这似乎是一些基本错误。任何帮助都将不胜感激。很容易说,两者都可能使用不同的API调用,或者android sdk使用保留的或“神奇的”重定向url。问题是,使用JavaScript的oauth往往是一个涉及客户端的流。