我在我的 android 应用程序上实现 Google Play 服务登录并将授权代码传递给我的后端服务器时遇到问题,因此服务器将交换访问令牌和刷新令牌的代码。
首先让我写几行已经尝试/阅读的内容:
- 在 code.google.com/apis/console 我创建了一个新项目,有两个客户端(WEB 客户端和 Android 安装客户端)
- 阅读https://developers.google.com/+/mobile/android/sign-in#cross-platform_single_sign_on和http://android-developers.blogspot.com/2013/01/verifying-back-end-calls上的文章-from-android.html
接下来,我编写了简单的 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__