Какие данные мне нужно хранить для связи между серверами OAuth2? - PullRequest
0 голосов
/ 22 марта 2020

Фон

Мое приложение получает данные из множества различных источников (API) и агрегирует их. Таким образом, пользователь регистрируется через OAuth2 в источнике один раз, а потом я постоянно звоню источнику.

Я использую thephpleague/oauth2-client для подключения к различным службам, я также использую пакеты провайдера, построенные сверху, для подключения к различным веб-сайты. У меня нет абсолютно никаких проблем.

Как только я аутентифицируюсь, я получаю экземпляр League\OAuth2\Client\Token\AccessToken.

Текущая ситуация

Прямо сейчас для хранения я делаю json_encode на экземпляр AccessToken и сохраните полученный неструктурированный string. Чтобы загрузить его, я json_decode и создаю новый экземпляр с помощью конструктора. Не очень интересно.

Вопрос

Если бы я хотел структурированно хранить токен доступа (ответ OAuth), какие данные мне понадобились бы? Что мне нужно сохранить для связи между серверами? Специфические c предметы и их типы? Я пытаюсь выяснить модель данных для хранения множества разных провайдеров.

1 Ответ

0 голосов
/ 22 марта 2020

Источники

Источники для ответа в 2 раза:

  1. РФ C: https://tools.ietf.org/html/rfc6749#section - 5.1 - Учитывая RF C поля:

    • access_token - ОБЯЗАТЕЛЬНОЕ значение псевдотипа string
    • token_type - ОБЯЗАТЕЛЬНОЕ значение псевдотип string
    • expires_in - рекомендуемое значение псевдотипа int
    • refresh_token - необязательное значение псевдотипа string
    • scope - необязательное значение псевдотипа string в случае отличия предоставленной области от области, указанной в запросе

    В RF C предусмотрено, что The client MUST ignore unrecognized value names in the response., однако в данном примере они приводятся в этом раздел, они включают ранее неопределенный value name.

  2. Библиотека, упомянутая : https://github.com/thephpleague/oauth2-client/blob/master/src/Token/AccessToken.php#L59 - Учитывая конструктор:

    • access_token - ОБЯЗАТЕЛЬНОЕ значение псевдотипа string
    • resource_owner_id - необязательное значение псевдотипа string
    • refresh_token - необязательное значение псевдотип string
    • expires_in - необязательное значение псевдотипа int с отступом до expires в качестве значения псевдотипа int

    Все остальное, переданное в конструктор, рассматривается как дополнительное данные.

Последствия

  • access_token и refresh_token должны храниться в виде строки с предупреждением, что refresh_token может быть нулевым
  • token_type подразумевается в используемой библиотеке и не является необходимым в этом случае, но может быть для некоторых других людей.
  • expires_in должно быть сохранено как некоторое представление момента времени .
  • resource_owner_id - это имя пользовательского значения, с которым может работать ваша библиотека. Сохраните его как строку, если вы хотите его использовать.
  • scope может быть полезно сохранить, если ваше приложение проверяет авторизацию области действия перед запросом API. Сохраните его как строку.
  • Все остальное является пользовательским значением и должно рассматриваться как таковое. Существует очень низкая вероятность совпадения имен значений между разными поставщиками. может храниться в виде массива строк.
...