5.5.2. Механизм аутентификации "client_secret_jwt"

Клиент, получивший при регистрации значение <client_secnet> от сервера авторизации, создает токен JWT, используя для обеспечения его целостности алгоритмы вычисления кода аутентификации сообщения HMAC на основе хэш-функции и значение <client_secret> в качестве ключа.

Данный механизм использует следующие параметры JWT (см. пункт 5.7.4):

- <iss>: (обязательный) источник; должен содержать <client_id> клиента;

- <sub>: (обязательный) субъект; должен содержать <client_id> клиента;

- <aud>: (обязательный) аудитория; значением должен быть URL-адрес конечной точки токена сервера авторизации;

- <jti>: (обязательный) идентификатор JWT; уникальный идентификатор токена, который необходим для предотвращения повторного использования токена;

- <exp>: (обязательный) время, по истечении которого токен не должен быть принят к обработке;

- <iat>: (опциональный) время выпуска JWT.

Токен JWT должен быть отправлен клиентом серверу авторизации в качестве значения параметра <client_assertion>. Значение параметра <client_assertion_type> должно быть "urn:ietf:params:-oauth: client-assertion-type:jwt-bearer". Эти параметры передаются в качестве утверждений (assertions) методом HTTP POST в адрес конечной точки авторизации с типом содержимого "application/x-www-form-urlencoded".

При использовании JWT для аутентификации клиента сервер авторизации должен проверить JWT в соответствии с приведенными ниже критериями.

1 JWT должен содержать значение параметра <iss> (эмитент).

2 JWT должен содержать значение параметра <sub> (субъект), идентифицирующего субъект JWT. Для аутентификации клиента это значение должно совпадать с <client_id> клиента.

3 JWT должен содержать значение параметра <aud> (аудитория), которое идентифицирует сервер авторизации как предполагаемую аудиторию. В качестве значения элемента <aud> может использоваться URL-адрес конечной точки токена сервера авторизации. Сервер авторизации должен отклонить JWT, который не содержит своего идентификатора в качестве аудитории.

4 JWT должен содержать значение параметра <exp> (время действия), ограничивающее временное окно, в течение которого JWT может отслеживаться. Сервер авторизации должен отклонить любой JWT с истекшим временем действия при условии допустимого расхождения часов. Сервер авторизации может отклонить JWT с необоснованно большим значением параметра <exp>.

5 JWT может содержать значение параметра <nbf> (не ранее), определяющее время, до которого токен не должен приниматься для обработки.

6 JWT может содержать значение параметра <iat> (время выпуска). Сервер авторизации может отклонять JWT со значением <iat>, которое необоснованно далеко от настоящего.

7 JWT может содержать значение параметра <jti> (JWT ID), которое предоставляет уникальный идентификатор токена. Сервер авторизации может гарантировать, что JWT не будут воспроизведены, поддерживая набор используемых значений <jti> в течение определенного промежутка времени, в течение которого JWT будет считаться действительным, на основе применимого момента <exp>.

8 JWT может содержать другие параметры.

9 JWT должен иметь цифровую подпись или MAC, применяемый эмитентом. Сервер авторизации должен проверить подпись JWT как JWS и отклонить JWT с недопустимой подписью или MAC.

В случае ошибки проверки JWT сервер авторизации должен ответить кодом ошибки "invalid_client" в качестве значения параметра <error> (см. подпункт 5.4.2.9). В случае успешной проверки JWT клиент считается аутентифицированным.

Примечание. Дополнительные сведения о данном методе аутентификации приведены в RFC 7521 [30] и RFC 7523 [31].

Для обеспечения безопасности передачи сообщений аутентификации клиента должен использоваться протокол TLS.