Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GoogleOAuth2使用Android生成的一次性代码,但不使用JSSDK生成的代码_Android_Authentication_Google Oauth - Fatal编程技术网

GoogleOAuth2使用Android生成的一次性代码,但不使用JSSDK生成的代码

GoogleOAuth2使用Android生成的一次性代码,但不使用JSSDK生成的代码,android,authentication,google-oauth,Android,Authentication,Google Oauth,我正在尝试使用来自Google的OAuth2API对用户进行身份验证。有两个平台,Android和Web。对于新用户,我在客户端获取一次性身份验证代码,并将其发送到两个平台上的服务器。一旦服务器收到代码,它将获取访问令牌,然后获取用户详细信息。服务器能够从Android设备发送的一次性身份验证代码中获取令牌,但从Web发送的代码失败 这是我在JS中获取一次性身份验证代码的代码片段 gauth2.grantOfflineAccess({ 'scope': 'profile emai

我正在尝试使用来自Google的OAuth2API对用户进行身份验证。有两个平台,Android和Web。对于新用户,我在客户端获取一次性身份验证代码,并将其发送到两个平台上的服务器。一旦服务器收到代码,它将获取访问令牌,然后获取用户详细信息。服务器能够从Android设备发送的一次性身份验证代码中获取令牌,但从Web发送的代码失败

这是我在JS中获取一次性身份验证代码的代码片段

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往往是一个涉及客户端的流。