Может ли маркер доступа OAuth 2.0 быть JWT?


Из того, что я могу сказать, спецификация OAuth 2.0 чрезвычайно расплывчата в терминах того, какую форму должен принимать access token:

Токен может обозначать идентификатор, используемый для получения авторизации. информация или может содержать авторизационную информацию проверяемым способом (например, строка токена, состоящая из некоторых данных и подписи). Дополнительные учетные данные для проверки подлинности, которые выходят за рамки данной спецификации, могут потребоваться для клиент должен использовать токен.

Маркер доступа обеспечивает уровень абстракции, заменяя различные конструкции авторизации (например, имя пользователя и пароль) на один маркер, понятный ресурсному серверу. Эта абстракция позволяет выдавать маркеры доступа с более жесткими ограничениями, чем разрешение на их получение, а также избавляет сервер ресурсов от необходимости понимать широкий спектр методов аутентификации.

Маркеры доступа могут иметь различные форматы, структуры и методы использования (например, криптографические свойства), основанные на требованиях безопасности сервера ресурсов. атрибуты маркеров доступа и методы, используемые для доступа к защищенным ресурсам, выходят за рамки данной спецификации и определяются сопутствующими спецификациями, такими какRFC6750 .

(курсив добавлен)

Связанный RFC6750 не предлагает много дополнительной специфичности. Существует пример тела ответа HTTP, которое шоу:

{
       "access_token":"mF_9.B5f-4.1JqM",
       "token_type":"Bearer",
       "expires_in":3600,
       "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
     }

Это, по-видимому, указывает на то, что access_token может быть непрозрачным текстом ASCII, таким как закодированный JSON Web Token (JWT)

С моей точки зрения, похоже, что JWT-as-access_token имеет некоторые желательные свойства:

  • Это известная спецификация, с довольно широким применением и клиентскими библиотеками, доступными на многих языках.

  • Это позволяет легко подписывать и проверять с помощью проверенной криптографии библиотеки.

  • Поскольку он может быть декодирован в JSON, это позволит нам включить метаданные и информацию о токене в сам токен.

Мои вопросы: Во-первых, допустимо ли, чтобы маркер доступа был JWT? Во-вторых, если это допустимо в соответствии со спецификацией, есть ли какие-либо дополнительные соображения, которые сделали бы использование JWT в качестве маркера доступа плохой идеей?

2 21

2 ответа:

A1: использование JWT в качестве маркера доступа, безусловно, разрешено спецификацией именно потому, что спецификация не ограничивает его формат.

A2: идея использования JWT в качестве маркера доступа заключается в том, что он может быть автономным, чтобы цель могла проверить маркер доступа и использовать связанный контент без необходимости возвращаться на сервер авторизации. Это большое свойство, но делает отзыв сложнее. Поэтому, если ваша система требует возможности для немедленного отзыва доступа, JWT вероятно, это не правильный выбор для маркера доступа (хотя вы можете получить довольно далеко, сократив время жизни JWT).

Пока сервер авторизации и сервер ресурсов согласовывают значение маркера доступа, не имеет значения, что они содержат. Таким образом, единственная причина, по которой у вас может возникнуть проблема, - это использование разных библиотек или фреймворков при реализации этих двух серверов.