У меня возникли проблемы с работой аутентификации Google в моем приложении для Android с использованием сервисов Google Play. Во-первых, я использовал образцы, предоставленные библиотекой, чтобы получить токен, используя область ниже.
GoogleAuthUtil.getToken(getActivity(), mEmail,"oauth2:https://www.googleapis.com/auth/userinfo.profile");
затем я использовал токен, чтобы получить больше информации о пользователе:
URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + token);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
Это сработало. Затем я использовал Проверка внутренних вызовов из приложений Android в блоге разработчиков Google для аутентификации пользователей приложения на моем веб-сервере. Поэтому я заменил область действия getToken на
audience:server:client_id:<webapp_clientId_for_localhost>.apps.googleusercontent.com
и использовал аналогичный чекер с тем, что в статье, для проверки аудитории и clientId (Android Client Id) на стороне сервера. Это также сработало, но если я попытаюсь получить больше информации о пользователе (имя и фамилия) либо из приложения для Android, либо из веб-приложения, используя API-интерфейс userinfo, я получаю:
{ "ошибка": { "ошибки": [ { "домен": "глобальный", "причина": "authError", "сообщение": "Неверные учетные данные", "locationType": "заголовок", "местоположение": " Авторизация" } ], "код": 401, "сообщение": "Неверные учетные данные" } }
Код, который я использую:
URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("Authorization", "OAuth " + token);
con.setRequestProperty("ContentType", "application/json; charset=UTF-8");
Любая идея, почему userinfo не работает? Есть ли что-то еще, что я должен добавить к объему?