Впервые использую Google+ API. У меня есть приложение с веб-клиентом и клиентом Android, которое использует G+ для аутентификации. Веб-клиент работает хорошо. У меня есть «Идентификатор клиента для веб-приложения», настроенный в консоли Google API, который я использую для получения токена с помощью клиента javascript.
Клиент javascript использует следующую кнопку (в основном дословно взятую из демонстрационного приложения Google):
<button class="g-signin" data-scope="https://www.googleapis.com/auth/plus.login" data-requestvisibleactions="http://schemas.google.com/AddActivity" data-clientId="my_web_application_client_id" data-callback="onSignInCallback" data-theme="dark" data-cookiepolicy="single_host_origin">
Я проверяю на сервере Python с помощью:
url = ('https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=%s' % token) h = httplib2.Http() result = json.loads(h.request(url, 'GET')[1])
Все идет нормально. Токен проходит проверку, как и ожидалось.
Теперь для приложения Android... Я установил «Идентификатор клиента для приложения Android» для того же проекта с отпечатком отладки, сгенерированным: keytool -exportcert -alias androiddebugkey -keystore debug.keystore -list -v
Пакет для имени идентификатора клиента соответствует тому, что указано в моем манифесте Android.
Я использую GoogleAuthUtil для создания токена в своем приложении для Android:
String token =
GoogleAuthUtil.getToken(
this,
"[email protected]",
"oauth2:server:client_id:<client_id>:" +
"api_scope:https://www.googleapis.com/auth/plus.login");
Если я использую свой недавно созданный идентификатор клиента приложения для Android, я получаю: GoogleAuthException: com.google.android.gms.auth.GoogleAuthException: Unknown
Я еще не понял этого, но некоторые решения намекают, что я должен просто использовать идентификатор клиента веб-приложения и что исключение работает по назначению.
Если я использую свой идентификатор клиента веб-приложения, то все работает нормально, и токен возвращается, но когда я отправляю токен на свой сервер для проверки, токен отклоняется:
{u'error_description': u'Invalid Value', u'debug_info': u'code: INVALID_VALUE
http status: 400
arguments: [invalid_token]
cause: com.google.security.lso.protocol.oauth2.common.OAuth2ErrorException:\
invalid_token at
com.google.security.lso.grant.token.TokenManager.getTokenInfo(TokenManager.java:603) at
com.google.security.lso.apiary.tokeninfo.TokenInfoAction.execute(TokenInfoAction.java:92)
Я проверил, что токен, прибывающий на сервер, тот же, что и в приложении (без случайных пробелов и т. д.).
Любые идеи, что я делаю неправильно? Спасибо за любые предложения!