Я использую аутентификацию Google с опцией redirect_uri (во избежание всплывающих окон). Когда пользователь входит в Chrome, я могу получить токен доступа, но в Safari (например) я не могу понять, как получить токен доступа. Строка запроса перенаправления включает id_token, который я могу успешно проверить с помощью этой конечной точки:
https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123
Это дает мне некоторую информацию о пользователе, но на самом деле мне нужен токен доступа, поскольку его ожидает мой серверный API.
Могу ли я получить токен доступа из id_token? Если да, то как. Я не могу найти никаких примеров.
Уточнение: я не пытаюсь аутентифицировать свое приложение, я получаю id_token от пользователя, который аутентифицируется через Google, входящий в систему во внешнем интерфейсе.
@ sg3s вы предлагаете попробовать «код», а затем использовать его для получения токена доступа? Я использую @ types / gapi с Angular, и у него нет возможности для этого, но я мог бы добавить его сам и попробовать,



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Только аутентификация пользователей
Если вы не используете API Google, а просто используете токен для аутентификации пользователей, вам следует проверять только id_token, а не использовать токен доступа. id_token - это концепция OpenID Connect, используемая для информирования клиента (вашего приложения) некоторой базовой информации о текущем вошедшем в систему пользователе.
Чтобы проверить id_token, вы можете используйте документацию, описывающий столько же, или этот связанный вопрос в Stackoverflow.
Использование API Google от имени ваших пользователей
Однако, если вы хотите использовать API Google от имени пользователя, вам понадобится access_token, поскольку id_token обычно не используются для аутентификации с бэкэндами. Чтобы получить токен доступа, пользователь должен авторизовать ваше приложение, чтобы иметь доступ к API Google от их имени. Если вы используете библиотеку gapi, то процесс выполнения вызовов API Google, скорее всего, в основном скрыт, но где-то должен быть токен доступа.
Эта документация Google описывает, что происходит за кулисами.
https://developers.google.com/identity/protocols/OAuth2
Если вы хотите получить доступ к API Google от имени ваших пользователей на бэкэнде, вам, возможно, придется следовать процессу, отличному от того, который использует ваш интерфейс. Тип ответа в запросах авторизации определяет, какой процесс используется (поэтому я спросил, какой тип ответа используется). Но библиотека Javascript, стоящая за пакетом gapi npm, похоже, поддерживает его, хотя доступ к ней может быть затруднен при ее использовании.
Также ознакомьтесь с вариантами офлайн, может быть, это то, что вы ищете? Если это не помогает, вы все равно можете проверить страницу документации Oauth2, на которую я ссылался ранее, для ссылок на другие параметры / другие языки для получения токенов аутентификации.
К сожалению, мне нужен access_token для API Google. Я не понял, как получить его из браузера, отличного от Chrome, при использовании ux_mode: 'redirect', чтобы избежать всплывающего окна.
Если у вас уже есть пользователь Google, вы можете получить токен доступа, но только в том случае, если для вашего токена доступа требуются те же области, что и уже используемые. Если у вас еще нет нужных вам областей, вы не сможете получить токен доступа без взаимодействия. Пожалуйста, проверьте параметры автономного режима, на которые я ссылался, для получения более подробной информации.
Какой тип ответа вы используете в своем первоначальном запросе авторизации в Google?