Источник: Nuances of Programming
Будем реализовывать единый вход Google OAuth для веб-сайта. Библиотека google-api-client устарела (о чем упоминается в Google Identity Document). Правда, есть еще одна подходящая для использования библиотека под названием google-api-ruby-client, но в этой статье будет рассматриваться только конструирование чистых HTTP/HTTPS-запросов.
Этап 1: настройка учетных данных Google
- Настраиваем страницу соглашения OAuth. Ничего особенного указывать не нужно, за исключением установки типа пользователя на External Usage (внешнее использование). Другие параметры просто оставляем по умолчанию.
3. Создаем идентификатор клиента OAuth (когда нужны разные ключи для разных сред, устанавливаем два или три для тестовой и эксплуатационной среды). В качестве типа приложения указываем Web application (веб-приложение), здесь же вводим название приложения и URI обратного вызова перенаправления.
4. Сохраняем Client ID (идентификатор клиента) и Client Secret (секрет клиента) для дальнейшего использования на следующих этапах.
Этап 2: получение краткосрочного кода авторизации
- Для проверки запроса используем Postman. Задействуем методGET, как в приведенном ниже примере (скопированном из указанного документа). Обязательные параметры: client_id, response_type=code, scope=openid%20profile%20email, redirect_uri.
4. Другие параметры, использованные в примере: access_type=offline, include_granted_scopes=true.
5. Не забываем указать URI обратного вызова в параметре redirect_uri.
Этап 3: получение долгосрочного токена
- Задействуем метод POST и в качестве типа указываем x-www-url-encoded. Обязательные параметры: code, client_id, client_secret, redirect_uri, grant_type=authorization_code.
4. Не забываем, что redirect_uri должен совпадать с путем redirect_uri, указанным в этапе 2.
Этап 4: получение электронной почты и профилей пользователей
- По окончании этапа 3 получаем несколько токенов. Следуя изложенному в этом документе, используем id_token.
- Для проверки id_token задействуем библиотеку Ruby google-id-token (отправляем id_token из веб-приложения [сторона браузера] и проверяем id_token на стороне веб-Api [сторона сервера api]).
- Напоминание: слово aud в библиотеке google-id-token означает GOOGLE_CLIENT_ID, поэтому отправляем из веб-приложения в веб-api в качестве параметра также и GOOGLE_CLIENT_ID. Не забываем сохранять идентификатор клиента Client ID в качестве переменной среды и на стороне Api, и на стороне приложения.
Этап 5: благополучно авторизуемся в своей учетной записи Google!
Рекомендации по использованию библиотекиRuby httprb/http:
Когда нужно указать в качестве типа HTTP-запроса с задействованием метода post тип x-www-url-encoded, лучше использовать функцию HTTP::URI.form_encode для изменения хеша Ruby на строку. В этом случае строка будет «съедена» методом post (а тип станет body).Вот пример:
Читайте также:
Перевод статьи 夜絳紅: Google OAuth for Ruby implementation