Pakage для проверки токена входа в Google в режиме Go on GAE

Я успешно получил токен входа в Google из моего приложения для Android на моем веб-сервере, написанном на странице Go running on GAE. Я не хочу использовать

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123

поскольку в нем есть проблема с задержкой и потенциальными сетевыми ошибками, предупрежденными на главной странице интеграции входа в систему google. Поэтому я нашел способ использовать клиентскую библиотеку API Google для Go, и я нашел это

https://github.com/google/google-api-go-client/blob/master/GettingStarted.md

Я обнаружил, что это было сложнее, чем Java и Python API-интерфейсы Google API, для чего мне нужно было просто вызвать метод GoogleIdTokenVerifier или функцию verify_id_token, чтобы получить информацию о пользователе Google, который вступил в приложение Android. Я не уверен, что иду в правильном направлении. Сообщите мне, как проверить токен входа в google, полученный от приложения Android.

Ответы

Ответ 1

Я слишком недавно столкнулся с этой проблемой и нашел два решения.

Но перед этим вам нужно понять, что делает библиотека python (или других рекомендуемых библиотек клиентов).

  • Он нажал https://www.googleapis.com/oauth2/v2/certs, чтобы получить массив открытых ключей rsa.
  • Декодировать токен.
  • Использует поле "kid" (key id) из декодированного токена для генерации ключа pem для сопоставления открытого ключа RSA.
  • Проверить подпись токена (который после 2-й точки в токене jwt) с помощью клавиши pem.

Теперь два решения:

  • Использование официальной библиотеки oauth "google.golang.org/api/oauth2/v2"

    func getTokenInfo(idToken string) (*oauth2.Tokeninfo, error) {
    oauth2Service, err := oauth2.New(&http.Client{})
    if err != nil {
        return nil, err
    }
    tokenInfoCall := oauth2Service.Tokeninfo()
    tokenInfoCall.IdToken(idToken)
    return tokenInfoCall.Do()
    }
    

    Из Tokeninfo вы можете проверить, что аудитория (tokenInfo.Audience) и выдана (tokenInfo.IssuedTo) действительны. И другие параметры, которые вы хотите проверить. Но официальная библиотека Голанга не следит за процессом, о котором я упоминал ранее. Он попадает на www.googleapis.com/oauth2/v2/tokeninfo для генерации tokeninfo (не www.googleapis.com/oauth2/v3/tokeninfo. v2 не дает некоторого поля, такого как "имя", но каждое поле, включая электронную почту, которое необходимо проверить на токен.).

  • Использование библиотеки GoogleIdTokenVerifier, которая представляет собой порт библиотеки python.

Что вы можете сделать для повышения эффективности процесса, это кэширование сертификатов и pem. Если не появился токен с новым "ребенком", не попадайте в URL-адрес.

Проведите проверку и проверьте, какой подход выполняется быстрее. Эта вещь о задержке может быть неправильной, поскольку вы используете сеть для получения сертификатов.