Как расширить токен Google OAuth, полученный на стороне клиента на стороне сервера - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть веб-приложение с внешним интерфейсом, созданным на EmberJS, и бэкендом на Java.

Я заставляю пользователя войти в систему с помощью Google OAuth и запрашиваю область действия: https://www.googleapis.com/auth/calendar

{
  "El": "google_user_id",
  "Zi": {
    "token_type": "Bearer",
    "access_token": "access_token",
    "scope": "openid email profile https://www.googleapis.com/auth/calendar.readonly https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/calendar",
    "login_hint": "login_hint",
    "expires_in": 3600,
    "id_token": "..AF16AF6oc7Fl2uv5V9r",
    "session_state": {
      "extraQueryParams": {
        "authuser": "0"
      }
    },
    "first_issued_at": 1550770587899,
    "expires_at": 1550774187899,
    "idpId": "google"
  },
  "w3": {
    "Eea": "google_user_id",
    "ig": "Shivang Tripathi",
    "ofa": "Shivang",
    "wea": "Tripathi",
    "Paa": "https://mnsbfsdbf/photo.jpg",
    "U3": "shivang.tripathi@org.com"
  }
}

Теперь я отправляю этот ответ на сервер.Сервер может использовать предоставленный «access_token» для выполнения различных задач, таких как получение списка календарей и т. Д., Путем вызова API с использованием REST.Например.Посылка вызова https://www.googleapis.com/calendar/v3/users/me/calendarList с "access_token" в качестве заголовка авторизации.

Хотя у меня возникла проблема. Токен недолговечен и истекает через 60 минут.

* 1012Могу ли я как-то расширить этот токен, чтобы он никогда не заканчивался или долгоживущий токен?Facebook позволяет это: https://developers.facebook.com/docs/facebook-login/access-tokens/refreshing Может кто-нибудь сказать мне, если Google позволяет это со стороны сервера и как?

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Неверно говорить "другого пути нет".Правильный способ - сделать запрос авторизации снова, но добавить «prompt = none».Кстати, "login_prompt" должен быть адресом электронной почты или идентификатором пользователя Google.

0 голосов
/ 21 февраля 2019

Оказывается, что нет пути.

Мне пришлось выбрать другой маршрут, а именно: https://developers.google.com/identity/protocols/OAuth2WebServer

  1. Создать URL-адрес авторизации и перенаправить пользователя на него: https://accounts.google.com/o/oauth2/v2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly&access_type=offline&include_granted_scopes=true&state=state_parameter_passthrough_value&redirect_uri=http://localhost:5000/callback&response_type=code&client_id=

  2. Обрабатывать обратный вызов, он имеет код авторизации

  3. Используйте этот код для получения токена обновления и токена доступа:

  4. POST / oauth2 / v4 / token HTTP / 1.1

    Хост: www.googleapis.com Тип контента: application / x-www-form-urlencoded

    code= 4 / P7q7W91a-oMsCeLvIaQm6bTrgtp7 & client_id = your_client_id & client_secret = your_client_secret & redirect_uri = https://oauth2.example.com/code& grant_type = authorization_code

...