Подтвердить что ты не робот

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]
4b9b3361

Ответ 1

Немного отличается перспектива на большой ответ Джоша C: поскольку это происходит, как аутентификация клиента, так и учетные данные гранта могут быть выражены как JWT, но семантика позади них различна.

Это касается разделения проблем: клиенты аутентифицируются с учетными данными, которые идентифицирует их, то есть они являются так называемыми subject, тогда как они используют гранты, которые были выпущены для них т.е. они являются так называемыми audience. Или как версия 12 черновика (https://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-12):

  1. JWT ДОЛЖЕН содержать претензию "sub" (субъект), идентифицирующую     который является субъектом JWT. Два случая должны быть     дифференцированная:

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

    В. Для аутентификации клиента субъект ДОЛЖЕН быть          "client_id" клиента OAuth.

Ответ 2

Наверное, очень мало. То, как клиент идентифицируется и как запрашиваются гранты авторизации, - это два разных понятия в OAuth, поэтому вопросы затрагивают эти понятия отдельно:

  • Может ли клиент аутентифицироваться на сервере авторизации с использованием JWT? Да.
  • Может ли клиент сделать запрос на грант с помощью JWT? Да.

Спекуляция, похоже, намекает на то, что разделение - это просто дизайнерское решение, откладывающее к разработчикам политики возможность найти, какие сценарии ценны для них:

Использование маркера безопасности для аутентификации клиента является ортогональным и отделяемым от использования маркера безопасности в качестве разрешения на авторизацию. Они могут использоваться как в комбинации, так и отдельно. Аутентификация клиента с использованием JWT является не более чем альтернативным способом для аутентификации клиентом конечной точки маркера и должна использоваться в сочетании с некоторым типом гранта для формирования полного и значимого запроса протокола. Разрешения на авторизацию JWT могут использоваться с аутентификацией или идентификацией клиента или без него. Независимо от того, требуется ли аутентификация клиента в сочетании с предоставлением разрешения JWT, а также поддерживаемые типы аутентификации клиентов, это решения политики по усмотрению сервера авторизации.

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

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