```
@startuml
participant ResourceOwner

activate UserAgent #FFBBBB

UserAgent -> Jenkins:  (A) Запрос защищеноого ресурса, например,\n  http://jenkins.s0XXXX.edu.slurm.io
activate Jenkins #FFBBBB

Jenkins -> Jenkins: (A) Выполняется проверка\n авторизован ли пользователь. \nПроверка наличия действующей сессии
activate Jenkins #FFBBBB
Jenkins -> Jenkins: (A) Создание сессии, присвоить \nидентификатор сессии JSESSIONID=Session#П1


Jenkins -> UserAgent: (A) Перенаправление браузера на сервер авторизации.\n Пример (по OIDC поверх OAuth): \n https://authserver.ru:8080/auth/realms/tests\n/protocol/openid-connect/auth?client_id=jenkins&\nredirect_uri=http://jenkins.s0XXXX.edu.slurm.io/ \nsecurityRealm/finishLogin&\nresponse_type=code&scope=openid&\nstate=NjM1YjE1NTktNjk0Yy00
deactivate Jenkins #DarkSalmon


UserAgent -> Keycloak: (A) Запрос по данным редиректа
activate Keycloak #FFBBBB


Keycloak --> UserAgent: (В) Форма ввода аутентификационных данных

ResourceOwner --> UserAgent: (В) Ввод данных

UserAgent -> Keycloak: (B) Передача введенных данных

Keycloak -> Keycloak: (B) Аутентифицирует пользователя \n и создает временный код \nи сессию пользователя Session#КС
activate Keycloak #FFBBBB

Keycloak --> UserAgent: (C) Перенаправляет запрос обратно в приложение,\n используя URL обратного вызова,\n указанный ранее (A), и дополнительно\n добавляет временный код authorisation grant code#1 в \nкачестве параметра запроса в URL обратного вызова.
deactivate Keycloak

UserAgent -> Jenkins: (C)  Передача authorization grant code#1 в сессии Session#П1.\nCookies: JSESSIONID = Session#П1,\nURL обратного вызова\n + авторизационный  код code#1

Jenkins -> Jenkins: (D) Приложение извлекает временный код,\n чтобы обменять код на \n Access токен, \n Refresh токен - опционально.
activate Jenkins #FFBBBB

Jenkins -> Keycloak: (D) Запрос токена по \n авторизационному коду \nPOST token_endpoint HTTP/1.1 \nContent-Type: application/x-www-form-urlencoded \nAuthorization: Basic YXBwLWVpc2dzLWRmbzo4NTM... \n client_secret=client_secret#1 \ngrant_type=authorization_code \nredirect_uri=http://jenkins.s0XXXX.edu.slurm.io/приложение_1/ \ncode=code#1 \n client_id=clientId#1


deactivate Jenkins

Keycloak -> Keycloak: (E) Аутентифицирует клиента, \n проверяет временный код
activate Keycloak #FFBBBB

Keycloak --> Jenkins: (E) Access токен, \n Refresh токен.
deactivate Keycloak
deactivate Keycloak

Jenkins --> UserAgent:  Вход в авторизованную зону в рамках сессии Session#П1
deactivate UserAgent

Jenkins -> ApiServer: запрос доступа к ресурсу
activate ApiServer #FFBBBB

ApiServer -> Keycloak: Проверка токена
activate Keycloak #FFBBBB
Keycloak --> ApiServer: результат проверки
deactivate Keycloak

ApiServer --> Jenkins: запрошенный ресурс
deactivate ApiServer
deactivate Jenkins
@enduml
```
