2

我在我的 android 应用程序上实现 Google Play 服务登录并将授权代码传递给我的后端服务器时遇到问题,因此服务器将交换访问令牌和刷新令牌的代码。

首先让我写几行已经尝试/阅读的内容:

接下来,我编写了简单的 android 应用程序(基于 Google Play 服务示例 auth 应用程序)和一个使用 gdata 的简单 python 代码(使用 web 服务 client_id 和 secret)。

在 android 应用程序上,我首先使用了四个用空格分隔的范围并获得了一个令牌。如果我在我的 python 代码中使用这个令牌,我总是会得到 {'error_message': 'unauthorized_client'}。

然后我尝试将范围更改为此值并且总是得到无效范围错误。

  • oauth2:server:client_id:server-client-id:api_scope:scope1 scope2
  • 观众:服务器:客户端 ID:服务器客户端 ID:API 范围:范围 1 范围 2
  • oauth2:audience:server:client_id:server-client-id:api_scope:scope1 scope2

对于 server-client-id,我使用了 web 服务器客户端、android 客户端、其他客户端的 client_id

请任何人都可以帮我解决这个问题。

谢谢

这是python后端的代码

import gdata
import gdata.gauth


CLIENT_ID = 'client_id'
CLIENT_SECRET = 'secret_id'
SCOPES = ["https://www.google.com/m8/feeds", "https://mail.google.com", "https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email"]
USER_AGENT = 'my-app'

token = gdata.gauth.OAuth2Token(client_id=CLIENT_ID, client_secret=CLIENT_SECRET, scope=' '.join(SCOPES), user_agent=USER_AGENT)

print "token ", token
print token.generate_authorize_url(redirect_url='urn:ietf:wg:oauth:2.0:oob')

try:
  print token.get_access_token("token")
except Exception, e:
  print e
  print e.__dict__ 
4

1 回答 1

1

You are retrieving an authorization code, not an access token. These are two different things.

Authorization codes can be used in your server side to get an access token. They are not access tokens and cannot be used as such.

于 2013-06-18T13:10:45.953 回答