Oauth 2.0 谷歌+;登录服务器端应用程序,将身份验证代码交换为访问令牌

Oauth 2.0 谷歌+;登录服务器端应用程序,将身份验证代码交换为访问令牌,oauth-2.0,google-plus,google-oauth,Oauth 2.0,Google Plus,Google Oauth,我正尝试按照此流程使用python服务器后端在android应用程序上登录用户: 我成功地从Android应用程序中获取了授权代码,但当我尝试将此代码从服务器交换为访问令牌时,我收到了一个“invalid_request”错误 在Android应用程序中,我使用的客户端id与我控制台中“web应用程序客户端id”下列出的服务器上的相同。我已验证重定向uri是否正确。是否无法从Android客户端生成授权代码并使用服务器交换访问令牌 我的python代码是: def auth_params(se

我正尝试按照此流程使用python服务器后端在android应用程序上登录用户:

我成功地从Android应用程序中获取了授权代码,但当我尝试将此代码从服务器交换为访问令牌时,我收到了一个“invalid_request”错误

在Android应用程序中,我使用的客户端id与我控制台中“web应用程序客户端id”下列出的服务器上的相同。我已验证重定向uri是否正确。是否无法从Android客户端生成授权代码并使用服务器交换访问令牌

我的python代码是:

def auth_params(self):
  client_id, client_secret = self.get_key_and_secret()
  return {
      'grant_type': 'authorization_code',    
      'code': self.data.get('code', ''),  # auth code from app
      'client_id': client_id,
      'client_secret': client_secret,
      'redirect_uri': self.get_redirect_uri()
  }       

@classmethod
def auth_headers(cls):
    return {'Content-Type': 'application/x-www-form-urlencoded',
            'Accept': 'application/json'}

def auth_complete(self, *args, **kwargs):
  params = self.auth_params()
  request = Request('https://accounts.google.com/o/oauth2/token', data=urlencode(params),
                    headers=self.auth_headers())
  try:
      response = simplejson.loads(urlopen(request).read())
  except HTTPError, e:
      print 'fml'

有两个特殊的重定向URI实际上不会重定向回服务器:“postmessage”和“urn:ietf:wg:oauth:2.0:oob”。这些特殊的重定向URI不会触发到服务器的重定向POST,而是在响应请求时返回OAuth 2.0令牌

当您将代码交换为访问令牌和刷新令牌时,与授权代码关联的重定向URI需要匹配

由于您的授权代码来自Android设备,因此您的重定向URI在这一行可能不匹配:

  'redirect_uri': self.get_redirect_uri()
对于Android代码交换,重定向URI必须为:
urn:ietf:wg:oauth:2.0:oob


希望这能有所帮助。正如您可能已经注意到的,如果您还使用从Web登录或Android返回的授权代码,则需要适当地设置重定向URI(例如,对于Android,为urn[…],则为“postmessage”,否则为配置的重定向)。

此处的重定向URI应为Android重定向?它应该将访问令牌发送回服务器。明白了!哦,伙计,我希望这个——“与授权代码相关联的重定向URI需要匹配”,在文档中的某个地方,或者我错过了它。非常感谢。