POSTMAN: не удалось выполнить вход через OAuth2.0 - PullRequest
2 голосов
/ 05 мая 2020

Я хочу запросить токен, чтобы мой почтальон вошел в мою учетную запись Gmail, а затем я мог вызвать API Google Cloud.

Я пытаюсь ввести свой адрес электронной почты Gmail и пароль от вашего имени как видно из этого изображения

Postman Request Token

Конечная цель - получить API, подобные этому

https://monitoring.googleapis.com/v1/projects/firetestjimis/dashboards

Я могу сделать это, войдя в систему с мою учетную запись Gmail из gcloud («gcloud auth application-default login»), затем распечатайте токен с помощью gcloud auth application-default print-access-token, скопируйте распечатанный токен и вставьте его в токен доступа (почтальон). Что ж, это работает, но это как бы обязывает меня запустить gcloud и установить его. Я почти уверен, что смогу достичь той же идеи, подписавшись с тем же пользователем, с которым я вошел в gcloud. Я просто не знаю, как это сделать с Почтальоном. Все, что я прочитал за последние часы, привело меня к изображению, которое я вставил выше, но в этом вопросе возникает ошибка.

Если это актуально, вот консоль gcloud, где я получаю токен

C:\Program Files (x86)\Google\Cloud SDK>gcloud auth application-default print-access-token
C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin\..\lib\third_party\google\auth\_default.py:69: UserWarning: Your application has authenticated using end user credentials from Google Cloud SDK. We recommend that most server applications use service accounts instead. If your application continues to use end user credentials from Cloud SDK, you might receive a "quota exceeded" or "API not enabled" error. For more information about service accounts, see https://cloud.google.com/docs/authentication/
  warnings.warn(_CLOUD_SDK_CREDENTIALS_WARNING)
ya29.a0Ae4lvC3-3WxUmx... removed token ... hs251yTql3eEE

C:\Program Files (x86)\Google\Cloud SDK>

*** Немного отредактировано после первой публикации

Другие предварительные результаты дают

Erro 400: invalid_request
Invalid parameter value for redirect_uri: Missing scheme: /

Когда я пробовал

Postman

Идентификатор клиента, который я скопировал из

https://console.developers.google.com/apis/credentials

*** отредактирован после предложения Мэдхеда

Я подписался внимательно все предложенные шаги, и действительно, я могу получить токен Google прямо от почтальона, нажав Получить новый токен доступа. Тем не менее, он получает

{
  "error": {
    "code": 403,
    "message": "Request had insufficient authentication scopes.",
    "status": "PERMISSION_DENIED"
  }
}

Для этих двух вариантов от Postman (вставлен скрипт curl, так как его легче оценить из других, чем экран Postman)

curl --location --request GET 'https://monitoring.googleapis.com/v1/projects/firetestjimis/dashboards' --header 'Authorization: Bearer ya29. *** token *** kO3Fg'

curl --location --request POST 'https://firestore.googleapis.com/v1/projects/firetestjimis/databases/(default)/documents:runQuery' --header 'Authorization: Bearer ya29. *** token *** kO3Fg' --header 'Content-Type: application/json' --data-raw '{
"structuredQuery": {
    "where" : {
        "fieldFilter" : { 
        "field": {"fieldPath": "id"}, 
        "op":"EQUAL", 
        "value": {"stringValue": "1"}
        }
    },
    "from": [{"collectionId": "transfer"}]
    }
}'

Вот идентификатор клиента OAuth создается на экране учетных данных

{"web":{"client_id":"7953 *** 5k6e9ivtdg.apps.googleusercontent.com","project_id":"firetestjimis","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"IJGCe *** Du6bU","redirect_uris":["https://oauth.pstmn.io/v1/callback"]}}

как загружено из

Google Cloud Plataform Credentials

А вот OAuth consent screen

*** отредактировано

Add Scorpe screen

scope invalid

*** отредактировано

trying add https://monitoring.googleapis.com/ as scope

  • отредактировано

Nothing returned from Cloud Monitoring API

*** отредактировано после успешного добавления двух областей действия

В нем говорится: «Так как вы добавили конфиденциальную область, ваш экран согласия требует проверки Google перед публикацией»

waiting for Google aproval

И когда я нажал «Отправить для проверки», я увидел, что он жалуется на ссылки на домашнюю страницу приложения и конфиденциальность приложений

complaining about two urls

Ответы [ 2 ]

5 голосов
/ 22 мая 2020

Фактически можно использовать Postman для доступа к защищенным OAuth 2.0 API Google.

Во-первых, вам необходимо создать клиент OAuth в своем проекте Google Cloud Console. Это должен быть клиент "веб-приложения", а URI перенаправления должен быть https://oauth.pstmn.io/v1/callback:

Create OAuth client ID

Запишите идентификатор клиента и клиента. Секрет:

Client ID & Client Secret

Теперь go Почтальону. Создать новый запрос. На вкладке «Авторизация» выберите OAuth 2.0 и нажмите «Получить новый токен доступа»:

New request

Заполните форму.

  • URL-адрес обратного вызова: https://oauth.pstmn.io/v1/callback (будет настроен автоматически Authorize using browser).
  • Авторизация через браузер: true
  • URL-адрес авторизации: https://accounts.google.com/o/oauth2/auth
  • URL токена доступа: https://accounts.google.com/o/oauth2/token
  • Идентификатор клиента: $ {ваш идентификатор клиента}
  • Секрет клиента: $ {ваш секретный секрет}
  • Объем: $ {ваш scopes}, например, https://www.googleapis.com/auth/gmail.readonly для доступа Gmail только для чтения. Убедитесь, что в вашем проекте разрешены соответствующие области и API (например, на странице конфигурации экрана согласия).

New access token Consent screen & Scopes Monitoring scopes

Нажмите «Запросить токен». Браузер откроет экран согласия Google OAuth приложения pstmn.io. При необходимости войдите в систему и предоставьте доступ. В конце процесса откроется всплывающее окно (убедитесь, что оно не заблокировано вашим браузером), перенаправляющее вас обратно в приложение Postman.

Go и используйте свой токен!

Token usage

3 голосов
/ 05 мая 2020

Вы не можете достичь своей цели входа в учетные записи Google с помощью этого метода. Client ID и Client Secret - это не ваше имя пользователя и пароль. Это учетные данные для вашего клиента аутентификации.

Если вы хотите использовать учетные данные пользователя Google, вам необходимо реализовать поддерживаемый поток Google OAuth. Существует несколько методов, но все они используют веб-браузер для обработки ввода имени пользователя и пароля.

Чтобы сгенерировать токен OAuth (Access / Identity / Refre sh), вам также необходимо указать область доступа. Это может включать / требовать аудит безопасности вашего приложения. Поэтому я рекомендую вам использовать библиотеки, поддерживаемые Google, если вы не хотите разбираться в деталях реализации потоков OAuth.

Аутентификация в качестве конечного пользователя

...