OAuth2: В чем разница между грантом разрешения авторизации JWT и мандатом Client Credentials с аутентификацией клиента JWT?
Профиль OAuth2 JWT вводит возможность использования JWT как в качестве разрешения на авторизацию, так и в качестве аутентификации клиента.
Функция аутентификации клиента JWT не зависит от определенного типа гранта и может использоваться с любым типом гранта, а также с предоставлением учетных данных клиента.
Однако использование типа гранта JWT выглядит точно так же, как использование разрешения учетных данных клиента с помощью аутентификации клиента JWT, за исключением того, что синтаксис несколько отличается.
В обоих случаях клиент связывается с конечной точкой маркера, чтобы получить токен доступа:
POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer&assertion=[JWT]
против
POST /token.oauth2 HTTP/1.1
Host: as.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=[JWT]
Ответы
Ответ 1
Немного отличается перспектива на большой ответ Джоша C: поскольку это происходит, как аутентификация клиента, так и учетные данные гранта могут быть выражены как JWT, но семантика позади них различна.
Это касается разделения проблем: клиенты аутентифицируются с учетными данными, которые идентифицирует их, то есть они являются так называемыми subject
, тогда как они используют гранты, которые были выпущены для них т.е. они являются так называемыми audience
. Или как версия 12 черновика (https://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-12):
-
JWT ДОЛЖЕН содержать претензию "sub" (субъект), идентифицирующую который является субъектом JWT. Два случая должны быть дифференцированная:
а. Для разрешения на предоставление разрешения субъект обычно идентифицирует авторизованный аксессор, для которого токен доступа (т.е. владелец ресурса или уполномоченный делегат), но в некоторых случаях может быть псевдонимный идентификатор или другое значение, обозначающее анонимный пользователь.
В. Для аутентификации клиента субъект ДОЛЖЕН быть "client_id" клиента OAuth.
Ответ 2
Наверное, очень мало. То, как клиент идентифицируется и как запрашиваются гранты авторизации, - это два разных понятия в OAuth, поэтому вопросы затрагивают эти понятия отдельно:
- Может ли клиент аутентифицироваться на сервере авторизации с использованием JWT? Да.
- Может ли клиент сделать запрос на грант с помощью JWT? Да.
Спекуляция, похоже, намекает на то, что разделение - это просто дизайнерское решение, откладывающее к разработчикам политики возможность найти, какие сценарии ценны для них:
Использование маркера безопасности для аутентификации клиента является ортогональным и отделяемым от использования маркера безопасности в качестве разрешения на авторизацию. Они могут использоваться как в комбинации, так и отдельно. Аутентификация клиента с использованием JWT является не более чем альтернативным способом для аутентификации клиентом конечной точки маркера и должна использоваться в сочетании с некоторым типом гранта для формирования полного и значимого запроса протокола. Разрешения на авторизацию JWT могут использоваться с аутентификацией или идентификацией клиента или без него. Независимо от того, требуется ли аутентификация клиента в сочетании с предоставлением разрешения JWT, а также поддерживаемые типы аутентификации клиентов, это решения политики по усмотрению сервера авторизации.
Одна конкретная возможность: разделение может позволить серверу авторизации настраивать разные политики по типам клиентов. Например, в случае публичного клиента (например, мобильного приложения) сервер не должен принимать тип предоставления кредитов клиенту. Вместо этого сервер может принимать тип гранта JWT для общедоступных клиентов и выдавать токен меньших привилегий.
Кроме этого, я бы предположил, что дизайн просто обеспечивает определенную свободу действий для клиентов и серверов, чтобы поддерживать эту часть существующего рукопожатия во время миграции этой части - по мере необходимости.