Управління профілем користувача
Профіль користувача системи містить набір атрибутів, які ідентифікують отримувача послуг, або посадову особу в процесі автентифікації та спрощують користування в системі завдяки розширенню контексту виконання операцій.
1. Структура профілю
Профіль користувача Кабінету отримувача послуг, або посадової особи складають наступні атрибути:
-
ПІБ
-
РНОКПП
-
ЄДРПОУ
-
Ознака представника юридичної особи
(лише для отримувачів послуг) -
Тип суб’єкта
(лише для отримувачів послуг)
Профіль користувача Кабінету посадової особи створює заздалегідь адміністратор доступу, перед першим входом до системи. Профіль користувача Кабінету отримувача послуг заповнюється автоматично при першому вході, відповідно до інформації з КЕП (деталі дивіться за посиланням). |
1.1. Атрибути профілю у Keycloak
Атрибути профілю користувача налаштовуються у Keycloak-реалмі, у секції Attributes відповідного користувача, і мають такі значення:
-
fullName
— для ПІБ; -
drfo — для РНОКПП;
-
edrpou — для ЄДРПОУ;
-
representative — для ознаки представника юридичної особи (для отримувача послуг);
-
subjectType — для типу суб’єкта (для отримувача послуг):
-
individual
— фізична особа; -
entrepreneur
— ФОП; -
legal
— юридична особа.
-
Для показу імені поточного користувача в Кабінеті використовуються вбудовані властивості у профілі
Keycloak для імені та прізвища. Ці атрибути необхідно додати при ручному створенні користувача-посадову особу. Для отримувача послуг вони створюються автоматично на базі атрибута ПІБ
.
-
given_name
- Ім’я користувача; -
family_name
- Прізвище користувача.
Наразі атрибути профілю зберігаються у Keycloak без шифрування, котре буде додано у наступних версіях Платформи. |
1.1.1. Протокол-мапери Keycloak (Keycloak Protocol Mappers)
Для того, щоб атрибути користувача стали доступні при формуванні токена чи відповіді, на API-метод /userinfo
налаштовуються відповідні мапери у клієнтах officer-portal та citizen-portal на кожен атрибут профілю.
Таблиця з маперами надана нижче.
Назва маперу | Тип маперу | Назва атрибута | Назва поля | Додати до Access Token | Додати до Userinfo | Профіль чиновника | Профіль людини |
---|---|---|---|---|---|---|---|
edrpou |
User Attribute |
edrpou |
edrpou |
так |
так |
так |
так |
drfo |
User Attribute |
drfo |
drfo |
так |
так |
так |
так |
fullName |
User Attribute |
fullName |
fullName |
так |
так |
так |
так |
representative |
User Attribute |
representative |
representative |
так |
так |
ні |
так |
subjectType |
User Attribute |
subjectType |
subjectType |
так |
так |
ні |
так |
family name |
User Property |
lastName |
family_name |
так |
так |
так |
так |
given name |
User Property |
firstName |
given_name |
так |
так |
так |
так |
Мапери налаштовуються автоматично, при розгортанні системи з використанням Keycloak Operator API, а саме створенням відповідного KeycloakClient CR.
1.1.2. Атрибути профілю в Access Token
Атрибути профілю користувача додаються до Access Token в процесі автентифікації та мають наступну структуру:
{
"edrpou": "1110011000",
"drfo": "220011000",
"fullName": "Гупало Василь Миколайович",
"representative": true,
"subjectType": "individual"
}
Структура токена у схемі спрощена та відображує лише атрибути профілю |
1.2. API для отримання профілю користувача
Інформація про профіль користувача доступна за методом на Kong API Gateway. Всі операції вимагають аутентифікацію. Отримання налаштувань можливе лише для поточного користувача.
GET /userinfo
Приклад відповіді:
{
"sub": "e9972cc8-53c5-4d50-ab5e-cd7d617d9180",
"email_verified": true,
"edrpou": "1110011000",
"roles": [
"officer"
],
"drfo": "220011000",
"name": "Василь Гупало",
"fullName": "Гупало Василь Миколайович",
"preferred_username": "vasyl_gypalo",
"given_name": "Василь",
"family_name": "Гупало",
"email": "vasyl_gypalo@gov.ua",
"representative": true,
"subjectType": "individual"
}
Цей метод використовується для відображення профілю користувача у кабінеті чиновника. Змінити профіль має можливість лише адміністратор доступу.
2. JWT-токен доступу користувача
JSON Web Token — це стандарт токена доступу на основі JSON. Токен використовується для передачі даних для аутентифікації користувачів. Токени створюються сервером, підписуються секретним ключем і передаються клієнту, який надалі використовує цей токен для підтвердження своєї особи. JWT стандартизовано в RFC 7519.
eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICI5QWw3QlVTNFJJLXlKUlRSOFZuSF9ubzZvb3RNWThoYWZoVkVRRmJUZlhjIn0.ewogICJleHAiOiAxNjI4NTEyMjQxLAogICJpYXQiOiAxNjI4NTExOTQxLAogICJqdGkiOiAiM2ExNjRhOGQtOTJlOC00YzM3LTgwMTEtODM5ZjMyY2M0ZjBmIiwKICAiaXNzIjogImh0dHBzOi8va2V5Y2xvYWsucmVnaXN0cnktcGxhdGZvcm0uZ292LnVhL2F1dGgvcmVhbG1zL29mZmljZXItcG9ydGFsIiwKICAiYXVkIjogImFjY291bnQiLAogICJzdWIiOiAiMzgwYWQzZDYtZTcxZi00OTNhLTk0NDktMThjMGI5NGRhNWIwIiwKICAidHlwIjogIkJlYXJlciIsCiAgImF6cCI6ICJvZmZpY2VyLXBvcnRhbCIsCiAgInNlc3Npb25fc3RhdGUiOiAiNDgyMmE2ZTktMjRiOS00Nzc2LWI1NWItZDcxN2Y0ZWYzZjgyIiwKICAiYWNyIjogIjEiLAogICJhbGxvd2VkLW9yaWdpbnMiOiBbCiAgICAiaHR0cHM6Ly9rZXljbG9hay5yZWdpc3RyeS1wbGF0Zm9ybS5nb3YudWEiCiAgXSwKICAicmVhbG1fYWNjZXNzIjogewogICAgInJvbGVzIjogWwogICAgICAib2ZmaWNlciIsCiAgICAgICJvZmZsaW5lX2FjY2VzcyIsCiAgICAgICJ1bWFfYXV0aG9yaXphdGlvbiIKICAgIF0KICB9LAogICJyZXNvdXJjZV9hY2Nlc3MiOiB7CiAgICAiYWNjb3VudCI6IHsKICAgICAgInJvbGVzIjogWwogICAgICAgICJtYW5hZ2UtYWNjb3VudCIsCiAgICAgICAgIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwKICAgICAgICAidmlldy1wcm9maWxlIgogICAgICBdCiAgICB9CiAgfSwKICAic2NvcGUiOiAicHJvZmlsZSBlbWFpbCIsCiAgImVtYWlsX3ZlcmlmaWVkIjogdHJ1ZSwKICAiZWRycG91IjogIjM0NTU0MzYyIiwKICAicm9sZXMiOiBbCiAgICAib2ZmaWNlciIsCiAgICAib2ZmbGluZV9hY2Nlc3MiLAogICAgInVtYV9hdXRob3JpemF0aW9uIgogIF0sCiAgIm5hbWUiOiAiYXV0b21hdGlvbiB1c2VyIiwKICAiZHJmbyI6ICIxMDEwMTAxMDE0IiwKICAiZnVsbE5hbWUiOiAi0KHQuNC00L7RgNC10L3QutC-INCS0LDRgdC40LvRjCDQm9C10L7QvdGW0LTQvtCy0LjRhyIsCiAgInByZWZlcnJlZF91c2VybmFtZSI6ICJhdXRvbWF0aW9uX3VzZXIiLAogICJnaXZlbl9uYW1lIjogImF1dG9tYXRpb24iLAogICJmYW1pbHlfbmFtZSI6ICJ1c2VyIiwKICAiZW1haWwiOiAiYXV0b21hdGlvbl91c2VyQGVwYW0uY29tIgp9.O4ByqtTh-n7708zAjFv7Lvs1SogWux4Hwwz_oPsfepcZ3iKaqPaaZUuw_exc4pAYIY4swXeUhm2GqhQFSYWGC6nK9HZloxuQboGy1SUAMvfmfSunNilUevjopBgCiOaCKuZPc5LC73Xegg9_zO9Nl0eFTSLA6_Wb-dFcGLBryYlXa-pmyOaLIecH4fGSugzTx-PDWLNF_tc1nyT7bQESThfnJl13qhQEC9zIr9_CRMCHKcwOpy33DrU2qkZpSql5YrneIVSP_jhwFUAMLtOAVOzNlJeL2HpFir6T3Ysf_orq848PsSuJKMLJTc52orrtSjmwGUJH62uDYAhCRgpRIg
{
"alg": "RS256",
"typ": "JWT",
"kid": "9Al7BUS4RI-yJRTR8VnH_no6ootMY8hafhVEQFbTfXc"
}
{
"exp": 1628512241,
"iat": 1628511941,
"jti": "3a164a8d-92e8-4c37-8011-839f32cc4f0f",
"iss": "https://keycloak.registry-platform.gov.ua/auth/realms/officer-portal",
"aud": "account",
"sub": "380ad3d6-e71f-493a-9449-18c0b94da5b0",
"typ": "Bearer",
"azp": "officer-portal",
"session_state": "4822a6e9-24b9-4776-b55b-d717f4ef3f82",
"acr": "1",
"allowed-origins": [
"https://keycloak.registry-platform.gov.ua"
],
"realm_access": {
"roles": [
"officer",
"offline_access",
"uma_authorization"
]
},
"resource_access": {
"account": {
"roles": [
"manage-account",
"manage-account-links",
"view-profile"
]
}
},
"scope": "profile email",
"email_verified": true,
"edrpou": "34554362",
"roles": [
"officer",
"offline_access",
"uma_authorization"
],
"name": "automation user",
"drfo": "1010101014",
"fullName": "Сидоренко Василь Леонідович",
"preferred_username": "automation_user",
"given_name": "automation",
"family_name": "user",
"email": "automation_user@test.com"
}
-
sub
- унікальний ідентифікатор користувача
Окрім стандартних атрибутів (claims) токен також містить додаткові:
-
edrpou
— унікальний ідентифікаційний номер юридичної особи в Єдиному державному реєстрі підприємств та організацій України. Присутній лише у юридичних осіб. У випадку ФОП містить ДРФО. -
drfo
— індивідуальний ідентифікаційний номер в Державному Реєстрі Фізичних Осіб - платників податків. Або серія і номер паспорта у разі відсутності у людини ідентифікаційного номера. -
fullName
- Повне ім’я користувача (ПІБ)