Oauth 2.0 谷歌+;登录服务器端应用程序,将身份验证代码交换为访问令牌
我正尝试按照此流程使用python服务器后端在android应用程序上登录用户: 我成功地从Android应用程序中获取了授权代码,但当我尝试将此代码从服务器交换为访问令牌时,我收到了一个“invalid_request”错误 在Android应用程序中,我使用的客户端id与我控制台中“web应用程序客户端id”下列出的服务器上的相同。我已验证重定向uri是否正确。是否无法从Android客户端生成授权代码并使用服务器交换访问令牌 我的python代码是: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
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需要匹配”,在文档中的某个地方,或者我错过了它。非常感谢。