Елемент <openid>
Описано елементи <openid> і <openidconnect> у файлі default.vrd: налаштування OpenID-провайдерів, параметри їх конфігурації та сценарій аутентифікації в клієнтських програмах BAS.. Опис елемента. Елемент <rely>. Елемент <provider>. Елемент <openidconnect>
Опис елемента
Цей елемент описує налаштування, пов’язані з OpenID-аутентифікацією. Елемент <openid> підпорядкований елементу <point> і може бути один або бути відсутнім. Елементу <openid> підпорядковані елементи <rely> і <provider>. Кожен із підпорядкованих елементів може бути один або бути відсутнім.
Цей елемент не має атрибутів.
Елемент <rely>
Елемент містить адресу інформаційної бази, яка є OpenID-провайдером.
Атрибут url
Визначає URL інформаційної бази BAS, що є OpenID-провайдером. Інформаційну базу потрібно опублікувати особливим чином.
Увага!
Взаємодія з OpenID-провайдером здійснюється лише через HTTPS-з’єднання.
Примітка
URL OpenID-провайдера не повинен завершуватися символом «/». Правильно: https://myserver.org/users-ib/ebasib/oid2op, неправильно: https://myserver.org/users-ib/ebasib/oid2op/.
Приклад:
<rely url="https://myserver.org/users-ib/ebasib/oid2op"/>
Елемент <provider>
Опис елемента
Елемент указує, що ця інформаційна база є OpenID-провайдером. Цьому елементу підпорядкований елемент <lifetime>, який може бути один або бути відсутнім.
Приклад:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns=http://bas-soft.eu/8.2/virtual-resource-system xmlns:xs=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/demo"
ib="Srvr="tcp://Server";Ref="demo";"
enable="false">
<openid>
<provider/>
</openid>
</point>
Елемент <lifetime>
Елемент визначає час життя ознаки аутентифікованості ідентифікатора в секундах. Якщо його не вказано, значенням за замовчуванням є 86 400 секунд (24 години). Максимальний час життя аутентифікаційних даних становить 604 800 секунд (7 діб). Якщо в елементі lifetime зазначено число, більше за максимальне значення, буде використано максимальне значення.
Приклад:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns=http://bas-soft.eu/8.2/virtual-resource-system xmlns:xs=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/demo"
ib="Srvr="tcp://Server";Ref="demo";"
enable="false">
<openid>
<provider>
<lifetime>432000</lifetime>
</provider>
</openid>
</point>
Елемент <returnto>
Елемент <returnto> підпорядкований елементу <provider>, його наявність необов’язкова, а кількість таких елементів не обмежена.
<returnto>mysite\.org</returnto> <returnto>.*\.bas-soft\.eu</returnto>
Вміст елемента є регулярним виразом, який визначає маску дозволених імен сайтів, на які може бути перенаправлено веб-браузер користувача (параметр запиту openid.return_to) після виконання команди OpenID-провайдера.
Якщо під час публікації OpenID-провайдера не зазначено жодного елемента <returnto>, будь-який запит до OpenID-провайдера, що містить параметр openid.return_to, завершуватиметься помилкою HTTP 400.
Елемент <openidconnect>
Опис елемента
Цей елемент описує параметри, пов’язані з аутентифікацією за протоколом OpenID Connect. Застосовується під час використання тонкого клієнта та веб-клієнта. Елемент <openidconnect> підпорядкований елементу <point> і може бути один або бути відсутнім. Елементу <openidconnect> підпорядковані елементи <providers> та <allowStandardAuthentication>. Кожен із підпорядкованих елементів може бути один або бути відсутнім.
Цей елемент не має атрибутів.
<openidconnect>
<providers><![CDATA[[
<json-data>
]]]>
</providers>
<allowStandardAuthentication>true</allowStandardAuthentication>
<openidconnect>
Елемент <providers>
Цей елемент містить опис зовнішніх OpenID-провайдерів, які підтримують протокол авторизації OpenID Connect v1.0 (https://openid.net/connect/). Опис є масивом об’єктів, кожен із яких описує одного OpenID-провайдера. Масив подано у вигляді JSON-серіалізації.
Кожен провайдер описується об’єктом із такими властивостями:
- name – ідентифікатор провайдера. Має бути унікальним у межах масиву. Якщо масив містить кілька провайдерів з однаковим ідентифікатором, буде використано останній у масиві.
- title – текстове подання провайдера. Відображатиметься на кнопці провайдера на сторінці аутентифікації за відсутності зображення (image).
- image – графічне подання провайдера. Відображатиметься на кнопці провайдера на сторінці аутентифікації. Зображення зазначається як data:image у форматі base64.
- discovery – визначає URL провайдера, звернення за яким дає змогу отримати всі його налаштування (discovery endpoint URL). Рекомендується використовувати провайдерів, які підтримують запис discovery endpoint.
- authenticationClaimName – визначає, яке поле JSON-файлу (JSON Web Token, JWT) із результатами аутентифікації слід використовувати як ідентифікатор для зіставлення користувача інформаційної бази з користувачем провайдера OpenID Connect. Якщо не вказано, використовується поле з електронною поштою.
authenticationUserPropertyName – визначає, яке поле в налаштуваннях користувача інформаційної бази використовується для порівняння з ідентифікатором користувача, переданим провайдером OpenID Connect. Допускається зазначення таких значень:
- name – ім’я користувача (властивість Name/Имя об’єкта InfoBaseUser/ПользовательИнформационнойБазы).
- OSUser – ім’я користувача операційної системи (властивість OSUser/ПользовательОС об’єкта InfoBaseUser/ПользовательИнформационнойБазы).
- endSessionEndpoint – визначає URL, на який буде виконано перехід після виконання команди завершення сеансу аутентифікації. До URL автоматично буде додано параметр id_token_hint, до якого буде поміщено токен, отриманий під час аутентифікації користувача. Закриття вкладки веб-браузера із запущеною програмою веб-клієнта, як і завершення роботи клієнтської програми, не призводить до завершення сеансу аутентифікації. У разі роботи у веб-клієнті після завершення сеансу аутентифікації буде виконано перехід на стандартну сторінку завершення сеансу.
- Provideconfig – опис налаштувань провайдера у вигляді JSON-файлу, якщо провайдер не підтримує запит на отримання налаштувань. Дані мають бути подані у форматі OpenID Provider Metadata (https://openid.net/specs/openid-connect-discovery-1_0.html#ProviderMetadata).
- clientconfig – клієнтська конфігурація у вигляді JSON-файлу. Формат цієї інформації відповідає формату OAuth 2.0 Authorization Request (https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest), до якого додається властивість authority, що має містити URL провайдера аутентифікації. Вміст цієї властивості залежить від використовуваного провайдера.
Властивість redirect_uri структури clientconfig містить URL переходу до обробника аутентифікації програми, яка надіслала запит на цю аутентифікацію. Зазвичай URL має такий вигляд: https://IBhost/IBname/authform.html, де:
- IBhost – ім’я хоста, на якому опубліковано інформаційну базу;
- IBname – ім’я опублікованої інформаційної бази, тобто вміст поля Name/Имя діалогу публікації інформаційної бази або аналогічне значення в разі іншого способу публікації.
- dialect – визначає протокол, який використовуватиметься для взаємодії з провайдером. Це необов’язковий атрибут: за його відсутності для взаємодії з провайдером використовуватиметься протокол OpenID Connect v1.0.
crypto – містить структуру, що описує модуль криптографії, який використовується для підписання запитів. Підписувати запити, що надсилаються, необхідно в разі використання для взаємодії з провайдером протоколу ЕСІА. Структура містить такі властивості:
- module_name – ім’я модуля криптографії;
- module_path – шлях до модуля криптографії;
- module_type – тип модуля криптографії;
- cert_thumbprint – відбиток сертифіката, який використовуватиметься для підписання запитів. За відбитком буде виконано пошук сертифіката. Сертифікат має бути попередньо розміщений у сховищі особистих сертифікатів.
- Поля структури, розміщеної у властивості crypto, аналогічні параметрам конструктора об’єкта CryptoManager/МенеджерКриптографии.
Приклад зазначення провайдерів:
<openidconnect>
<providers><![CDATA[[
{
"name": "google",
"title": "Google",
"discovery": "https://accounts.google.com/.well-known/openid-configuration",
"authenticationClaimName": "email",
"clientconfig": {
"authority": "https://accounts.google.com/",
"client_id": "<ідентифікатор клієнта>",
"redirect_uri": "https://localhost/openidc/authform.html",
"response_type": "id_token token",
"scope": "openid email",
"filterProtocolClaims": true,
"loadUserInfo": false
}
},
{
"name": "microsoft",
"title": "Microsoft",
"authenticationUserPropertyName" : "OSUser",
"image": "data:image/png;base64,………",
"discovery": "https://login.microsoftonline.com/<ідентифікатор клієнта>/.well-known/openid-configuration",
"clientconfig": {
"authority": "https://login.microsoftonline.com/<ідентифікатор клієнта>/",
"client_id": "<ідентифікатор клієнта>",
"redirect_uri": "https://localhost/openidc/authform.html",
"response_type": "id_token token",
"scope": "openid email"
}
},
{
"name": "googleII",
"title": "Another Google",
"providerconfig": {
"issuer": "https://accounts.google.com",
"authorization_endpoint": "https://accounts.google.com/o/oauth2/v2/auth",
"token_endpoint": "https://www.googleapis.com/oauth2/v4/token",
"response_types_supported": ["code","token"],
"scopes_supported": ["openid","email","profile"]
},
"clientconfig": {
"authority": "https://accounts.google.com/",
"client_id": "<ідентифікатор клієнта>",
"redirect_uri": «https://localhost/openidc/authform.html",
"response_type": "id_token token",
"scope": "openid email"
}
}
]]]>
</providers>
<allowStandardAuthentication>true</allowStandardAuthentication>
</openidconnect>
Елемент <allowStandardAuthentication>
Елемент визначає можливість застосування аутентифікації системи BAS. Якщо для цього елемента встановлено false, на формі аутентифікації під час спроби входу у веб-клієнт буде доступна аутентифікація лише за допомогою провайдерів, описаних у файлі default.vrd.
Елемент може мати такі значення:
- true – аутентифікацію системи BAS дозволено. Значення за замовчуванням.
- false – аутентифікацію системи BAS заборонено.
Сценарій роботи
Аутентифікація за допомогою провайдера OpenID Connect доступна лише за умови зазначення параметрів одного або кількох провайдерів у файлі default.vrd. Під час спроби використати клієнтську програму (тонкий клієнт або веб-клієнт) для доступу до інформаційної бази виконуються такі дії:
- Якщо в командному рядку клієнтської програми явно вказано провайдера, виконується перехід відповідно до параметрів, зазначених у файлі default.vrd для цього провайдера.
- Інакше формується форма запуску, залежно від клієнтської програми, на якій розміщено всіх налаштованих у файлі default.vrd провайдерів OpenID Connect. Залежно від налаштувань на цій сторінці може бути кнопка доступу за допомогою стандартної аутентифікації BAS.
- Після вибору провайдера користувача перенаправляють на сторінку аутентифікації вибраного провайдера. На цій сторінці користувач аутентифікується у вибраного провайдера будь-яким доступним для цього провайдера способом.
- Потім провайдер перенаправляє користувача на спеціальну сторінку системи, передаючи як «параметр» JSON-файл (JSON Web Token, JWT) із результатами аутентифікації. Адресу цієї сторінки зазначено у властивості redirect_uri структури clientconfig елемента provider.
- За допомогою результатів аутентифікації, переданих провайдером, система отримує від провайдера ключовий параметр для ідентифікації користувача. За замовчуванням цим параметром є адреса електронної пошти користувача, але за допомогою файлу default.vrd його можна перевизначити.
- Отримана адреса електронної пошти використовується для пошуку користувача в інформаційній базі системи. Пошук виконується за властивістю користувача Name/Имя або OSUser/ПользовательОС. Необхідність використання для пошуку властивості OSUser/ПользовательОС має бути явно зазначена за допомогою файлу default.vrd.
- Після цього аутентифікація вважається успішно завершеною, а програма продовжує запускатися.
- У разі неуспішної аутентифікації на провайдері подальші дії провайдера не визначено.