Google oauth2使用从Android生成的一次性代码,但不适用于从JS SDK生成的代码

Sam*_*ula 7 authentication android google-oauth

我正在尝试使用Google的oauth2 api对用户进行身份验证.有两个平台,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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

在服务器端,这是我要从一次性代码中获取令牌的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
Run Code Online (Sandbox Code Playgroud)

从Android生成验证代码时,此Web服务调用返回200和令牌.从Web发送时,相同的方法会引发以下错误.

错误:400,请求无效; 缺少参数'redirect_uri'

在这种情况下,我不需要发送任何redirect_uri,因为我在那里阅读响应.但我仍然尝试设置一个空值,并尝试将其设置为与谷歌开发者控制台中的某个值完全匹配的某个值.在那种情况下,我还在......

错误:400,请求无效; redirect_uri不匹配.

我无法理解这个Web服务调用对于android代码而不是Web代码的完美工作.请注意,Android应用和Web应用的范围不同.但是,这似乎是一些根本性的错误.任何帮助,将不胜感激.