Использование программного компонента Клиентский Модуль сервиса Аутентификации KMAH#

Аутентификация запроса по заголовку с JWT-токеном#

При использовании локального режима верификации токенов (authPublicKeyLocations не заполнен), публичный ключ для проверки токена должен быть в формате PEM. Выгрузка ключа KeyCloak должна быть выполнена по инструкции (секция для версии провайдера 7.3.1).

При использовании онлайн получения публичного ключа (в authPublicKeyLocations указан mapping на онлайн получение публичного ключа), дополнительных действий с публичным ключом не требуется.

В фильтр аутентификации приходит запрос требующий аутентификации. В заголовке запроса Authorization: передается JWT-токен с набором полей для аутентификации запроса. Клиентский Модуль производит проверку и валидацию необходимых для аутентификации полей из JWT-токена и в зависимости от сценария аутентифицирует запрос, либо возвращает ошибку аутентификации.

Ниже приводится пример входящего JWT-токена и описание его полей.

{
	"alg" : "RS256",
	"typ" : "JWT",
	"kid" : "QQQGMpFRIhaR1HDeJNIVRrEmUK14AgR_sz_rg-5kjvU"
}{
    "exp": 1623917687,
    "iat": 1623917387,
    "jti": "b986ddb6-d96e-400d-8b09-64f217ea98a6",
    "iss": "https://auth.my.company.ru/auth/realms/CustomerA",
    "aud": [
        "CustomerA:Project1",
        "CustomerA:Project2"
    ],
    "sub": "6608179f-9f7f-4154-922f-f541c7448e6e",
    "typ": "Bearer",
    "azp": "CustomerA:KMAH",
    "session_state": "aed58344-610d-4d09-b241-5db0193e2ad5",
    "acr": "1",
    "resource_access": {
        "CustomerA:Project1": {
            "roles": [
                "JustUser"
            ]
        },
        "CustomerA:Project2": {
            "roles": [
                "AppRoleC",
                "AppRoleB"
            ]
        }
    },
    "scope": "email profile",
    "email_verified": false,
    "preferred_username": "ivanov-ii"
}
    

Cодержимое токена приведено в качестве примера, и может не соответствовать по наполнению с реальными токенами.

Блок

Параметр

Описание

Пример

Header

alg

Алгоритм, который использовался для подписания токена

RS256

typ

Тип формата токена

JWT

kid

ID открытого ключа для проверки подписи

QQQGMpFRIhaR1HDeJNIVRrEmUK14AgR_sz_rg-5kjvU

Playload

jti

JWT ID Claim - уникальный идентификатор токена

9d4cd7be-320a-4ee7-b8b8-15623c0ba4dd

typ

Тип токена

Bearer

exp

Срок действия токена

1586514237

nbf

Срок, ДО которого токен НЕ может быть использован

0

iat

Время выдачи токена

1586513637

iss

Идентификатор издателя токена

https://mycompany-auth.mycompany.ru/auth/realms/PlatformAuth

azp

Получатель, сторона которая запросила токен (содержит client id)

PlatformAuth-Proxy

sub

Идентификатор назначения токена, содержит ID УЗ пользователя

739edb6e-b9b5-4ec5-9731-2e37de8d6327

aud[]

Определяет получателей, для которых предназначен токен

[ "PlatformUFS", "PlatformAuthZ" ]

nonce

Строковое значение, используемое для связывания сеанса клиента с TokenID

64ac9d64d2b2b31167ab02015ae75d4e

auth_time

Время когда была произведена аутентификация

1586513637

session_state

Идентификатор сессии пользователя

e281c489-b28b-4213-95a5-e6985071b69c

acr

Уровень, достаточный для идентификации

1

realm_access.roles[]

Набор разрешений для работы с консолью

"roles" : ["EFS_APPLICATION_ADMIN","platformauth_admin","uma_authorization"]

preferred_username

Логин пользователя

test_admin

Перезагрузка секретов провайдера#

Механизм перезагрузки настроек (секретов) провайдера в режиме рантайм реализован начиная с версии 7.4.17.

С детальной настройкой перезагрузки секретов провайдера можно ознакомиться в разделе Настройка перезагрузки секретов провайдеров.