Серверная аутентификация с использованием учетных записей Google в расширении Chrome - PullRequest
0 голосов
/ 25 мая 2018

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

Теперь мне нужно создать сопутствующее расширение Chrome.Это расширение должно получить доступ к веб-приложению, поэтому оно должно пройти аутентификацию в этом приложении.Я настроил свое расширение, используя официальную документацию , но во время экспериментов я понял, что это не то, что мне нужно.Поскольку он использует неявный поток OAuth2 , он не возвращает токен, который может быть проверен на стороне сервера.Этот поток подходит только для использования API Google на стороне клиента, что не является моим вариантом использования.Эта документация (и почти все остальное, что я нашел в Интернете) посвящена двум возможным случаям:

  1. Мы хотим получить доступ к API Google на стороне расширения (chrome.identity.getAuthToken()).
  2. Мы хотим аутентифицироваться с использованием альтернативного сервиса OAuth2 (chrome.identity.launchWebAuthFlow()).

Однако в моем случае я хотел бы аутентифицировать пользователей с использованием аккаунтов Google, но обрабатывать токен на стороне сервера.моего веб-приложения.Я мог бы использовать вариант 2 здесь, но мне просто «не кажется правильным» создавать собственную «службу аутентификации не от Google», которая является просто оберткой над сервисом аутентификации Google, только для возможности аутентификации на стороне сервера..

Действительно ли вариант 2 - единственный путь или есть какой-то более простой способ?

Я также видел, как кто-то рекомендовал использовать конечную точку https://www.googleapis.com/oauth2/v3/tokeninfo для проверки токена, ноМне трудно убедиться, что это действительно "официальный" и безопасный способ сделать это.

1 Ответ

0 голосов
/ 02 июня 2018

Чтобы получить токен доступа, который вы можете использовать в обеих частях вашего приложения, на расширении и на сервере, вам нужно запросить Google Cross-Client Access Token.Это позволяет вам зарегистрировать два приложения (два идентификатора клиента) в одном проекте и поделиться маркером доступа.

Это описано и обсуждено Google здесь:

Приблизительные шаги:

  1. Вам понадобятся два clientIds, один для вашего внутреннего номера, а другой для вашего серверного приложения.
  2. Добавление обоих clientIds в один проект
  3. Получение токена кросс-клиентского доступа.с вашего внутреннего номера
  4. Отправьте его на сервер через HTTPS

Чтобы сделать это в Chrome, похоже, что вы бы вызвали chrome.identity.getAuthToken() с функцией обратного вызова, которая отправляет токен на вашвеб-приложение.

В справочнике сказано: chrome.identity.getAuthToken():

chrome.identity.getAuthToken(object details, function callback)

Получает токен доступа OAuth2 с использованием идентификатора клиента и областей, указанных в разделе манифеста oauth2.JSON.

и что это спринять функцию обратного вызова, указанную как:

Вызывается с токеном доступа OAuth2, как указано в манифесте, или не определено, если произошла ошибка.

Если указать параметр обратного вызова, это должна быть функция, которая выглядит следующим образом:

function(string token) {...};

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...