Получение токена доступа Google OAuth из id_token

Я использую аутентификацию Google с опцией redirect_uri (во избежание всплывающих окон). Когда пользователь входит в Chrome, я могу получить токен доступа, но в Safari (например) я не могу понять, как получить токен доступа. Строка запроса перенаправления включает id_token, который я могу успешно проверить с помощью этой конечной точки:

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

Это дает мне некоторую информацию о пользователе, но на самом деле мне нужен токен доступа, поскольку его ожидает мой серверный API.

Могу ли я получить токен доступа из id_token? Если да, то как. Я не могу найти никаких примеров.

Уточнение: я не пытаюсь аутентифицировать свое приложение, я получаю id_token от пользователя, который аутентифицируется через Google, входящий в систему во внешнем интерфейсе.

Какой тип ответа вы используете в своем первоначальном запросе авторизации в Google?

sg3s 15.12.2018 10:58

@ sg3s вы предлагаете попробовать «код», а затем использовать его для получения токена доступа? Я использую @ types / gapi с Angular, и у него нет возможности для этого, но я мог бы добавить его сам и попробовать,

beachCode 15.12.2018 11:29
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
4
2
4 210
1

Ответы 1

Только аутентификация пользователей

Если вы не используете 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, похоже, поддерживает его, хотя доступ к ней может быть затруднен при ее использовании.

https://developers.google.com/api-client-library/javascript/reference/referencedocs#googleusergetauthresponseincludeauthorizationdata

Также ознакомьтесь с вариантами офлайн, может быть, это то, что вы ищете? Если это не помогает, вы все равно можете проверить страницу документации Oauth2, на которую я ссылался ранее, для ссылок на другие параметры / другие языки для получения токенов аутентификации.

К сожалению, мне нужен access_token для API Google. Я не понял, как получить его из браузера, отличного от Chrome, при использовании ux_mode: 'redirect', чтобы избежать всплывающего окна.

beachCode 18.12.2018 06:52

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

sg3s 19.12.2018 14:57

Другие вопросы по теме