Из того, что я могу сказать, спецификация 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 в качестве токена доступа плохими идеями?