Налаштування підтримки OpenID-аутентифікації
Описано налаштування OpenID-аутентифікації у файлі default.vrd для залежної інформаційної бази та OpenID-провайдера. Наведено запити зовнішнього інтерфейсу й вимоги до зовнішніх провайдерів.. Налаштування для використання OpenID. Налаштування інформаційної бази, яка виступає OpenID-провайдером. Додатковий інтерфейс для використання зовнішніми ресурсами. Вимоги до зовнішніх OpenID-провайдерів
Налаштування для використання OpenID
Налаштування інформаційної бази, яка виступає OpenID-провайдером
Додатковий інтерфейс для використання зовнішніми ресурсами
Вимоги до зовнішніх OpenID-провайдерів
Налаштування для використання OpenID
Якщо інформаційна база використовує OpenID-аутентифікацію, у файлі default.vrd, який використовується для публікації інформаційної бази на веб-сервері, необхідно вказати адресу OpenID-провайдера, за допомогою якого виконується аутентифікація. Для цього призначено елементи <openid> і <rely>.
Приклад:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns="http://bas-soft.eu/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>
<rely url="https://myserver.org/users-ib/e1cib/oid2op"/>
</openid>
</point>
Ці елементи описують URL OpenID-провайдера, який виконує аутентифікацію користувача для інформаційної бази з OpenID-аутентифікацією. У наведеному прикладі OpenID-провайдером є інформаційна база, опублікована за адресою https://myserver.org/users-ib.
Налаштування цього параметра можна виконати за допомогою діалогу публікації на веб-сервері на вкладці OpenID.
Налаштування інформаційної бази, яка виступає OpenID-провайдером
Якщо інформаційна база виступає OpenID-провайдером, у файлі default.vrd, який використовується для публікації інформаційної бази на веб-сервері, необхідно вказати, що ця інформаційна база є OpenID-провайдером. Для цього призначено елементи <openid> і <provider>.
Приклад:
<?xml version="1.0" encoding="UTF-8"?>
<point xmlns=http://bas-soft.eu/virtual-resource-system xmlns:xs=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/users-ib"
ib="Srvr="tcp://Server";Ref="oidusers";"
enable="false">
<openid>
<provider>
<lifetime>432000</lifetime>
</provider>
</openid>
</point>
Ці елементи вказують, що:
- інформаційна база виступає OpenID-провайдером;
- час дії ознаки аутентифікованості становить 432 000 секунд (або 5 діб);
- URL, зазначений в елементі <rely> файлу default.vrd (адреса OpenID-провайдера), може мати такий вигляд: https://myserver.org/users-ib/e1cib/oid2op. URL матиме такий вигляд, якщо як ім'я хоста, на якому опубліковано інформаційну базу, використовується myserver.org.
Налаштування цього параметра можна виконати за допомогою діалогу публікації на веб-сервері на вкладці Інші, у групі OpenID.
Додатковий інтерфейс для використання зовнішніми ресурсами
До OpenID-провайдера, яким є інформаційна база BAS, можна звертатися за стандартним протоколом OpenID 2.0 з урахуванням деяких особливостей:
- У запитах на інтерактивну та неінтерактивну аутентифікацію (параметр openid.mode дорівнює checkid_immediate або checkid_setup) параметрам openid.claimed_id і openid.identity має бути встановлено значення http://specs.openid.net/auth/2.0/identifier_select. Установлення цього значення означає, що ідентифікатор користувача визначає провайдер.
- Запити на неінтерактивну аутентифікацію з іншими значеннями параметрів openid.claimed_id і openid.identity призводять до запиту на інтерактивну аутентифікацію, під час якої значення openid.claimed_id і openid.identity визначає провайдер.
OpenID-провайдер має форму для введення імені користувача та пароля під час інтерактивної аутентифікації.
Також система надає низку команд, що спрощують використання OpenID-провайдера сторонніми системами. Для опису команд використовуються такі скорочення:
- ProviderIB – інформаційна база OpenID-провайдера;
- RPID – інформаційна база залежної сторони OpenID.
Параметри запитів передаються в кодуванні UTF-8.
Запит XRDS-документа OpenID-провайдера
Опис:
Виконує отримання XRDS-документа, що описує властивості OpenID-провайдера.
Синтаксис:
https://hostname/ProviderIB/e1cib/oid2op
Значення, що повертається:
XRDS-документ, що описує властивості OpenID-провайдера.
Запит XRDS-документа залежної сторони OpenID
Опис:
Виконує отримання XRDS-документа, що описує властивості залежної сторони OpenID.
Синтаксис:
https://hostname/RPIB/e1cib/oid2rp
Значення, що повертається:
XRDS-документ, що описує властивості залежної сторони OpenID.
Запит аутентифікації
Опис:
Виконує запит аутентифікації.
Синтаксис:
https://hostname/ProviderIB/e1cib/oid2op?cmd=auth
Параметри:
openid.auth.user обов'язковий
Ім'я користувача, як воно задано в базі OpenID-провайдера.
openid.auth.pwd обов'язковий
Пароль користувача.
openid.auth.2FCode необов'язковий
Код другого фактора аутентифікації.
opeind.auth.short необов'язковий
Якщо параметру встановлено значення true, аутентифікація виконується в межах сесії веббраузера, але не довше, ніж значення параметра lifetime файлу default.vrd, що описує публікацію інформаційної бази OpenID-провайдера.
openid.auth.check необов'язковий
Потрібно виконати перевірку відповіді на цей запит (параметр дорівнює true). Має сенс лише в разі непорожнього параметра openid.return_to.
openid.return_to необов'язковий
Містить URL, на який виконується перехід після обробки запиту.
Значення, що повертається:
Якщо параметр openid.return_to не зазначено, повертається порожній документ із кодом стану HTTP:
- 200 – аутентифікація виконана успішно;
- 400 – аутентифікацію не виконано;
402 – аутентифікацію за логіном і паролем виконано успішно. Потрібно ввести код другого фактора. У відповіді має бути заголовок з ім'ям 2FAType, який може містити одне зі значень:
- secretCode – для аутентифікації слід ввести секретний код;
- external – другий фактор виконується на боці провайдера.
- На момент отримання такого коду відповіді запит на виконання другого фактора аутентифікації вже надіслано OpenID-провайдером провайдеру другого фактора аутентифікації.
- Передбачається, що OpenID-провайдер перевірить коректність логіна та пароля, але не створюватиме сеанс користувача в разі виявлення потреби виконати другий фактор аутентифікації. Сеанс буде створено під час наступного звернення, після повторної перевірки логіна, пароля та другого фактора.
Після отримання відповіді 402 необхідно виконати таке:
- У разі аутентифікації за допомогою коду (secretCode) – додати секретний код як додатковий параметр у запит.
- У разі аутентифікації на боці провайдера (external) – нічого не додавати. Сервер надішле запит на перевірку аутентифікації та перевірить другий фактор.
Якщо параметр openid.return_to зазначено, виконується переадресація на адресу, вказану в параметрі. У разі успішної аутентифікації до URL додаються такі параметри:
- openid.auth.user зі значенням, що дорівнює імені користувача;
- openid.auth.uid з одноразовим ідентифікатором значення для перевірки цієї відповіді. Цей параметр зазначається в разі вказання параметра openid.auth.check у запиті на аутентифікацію.
У разі невдалої аутентифікації виконується перехід за вказаним URL без додавання будь-яких параметрів.
Запит OpenID-провайдера на перевірку аутентифікації
Опис:
Виконується перевірка аутентифікації.
Синтаксис:
https://hostname/ProviderIB/e1cib/oid2op/2FACheck?user=xxx
Параметри:
user обов'язковий
Ім'я користувача (xxx), аутентифікацію якого слід перевірити.
Значення, що повертається:
Повертається порожній документ із кодом стану HTTP:
- 200 – аутентифікація виконана успішно, користувача аутентифіковано за допомогою другого фактора;
400 – аутентифікацію не виконано з однієї з причин:
- не зазначено параметр user;
- перед цим запитом не було звичайного запиту на аутентифікацію;
- аутентифікацію не виконано;
- час аутентифікації минув.
Запит OpenID-провайдера для перевірки активної аутентифікації
Опис:
Виконується перевірка аутентифікації.
Синтаксис:
https://hostname/ProviderIB/e1cib/oid2op?cmd=lookup
Параметри:
openid.return_to обов'язковий
Містить URL, на який виконується перехід після обробки запиту.
openid.auth.check необов'язковий
Потрібно виконати перевірку відповіді на цей запит (параметр дорівнює true). Має сенс лише в разі непорожнього параметра openid.return_to.
Значення, що повертається:
Виконується переадресація на URL, зазначений у параметрі openid.return_to. У разі успішної аутентифікації до URL додаються такі параметри:
- openid.auth.user зі значенням, що дорівнює імені користувача;
- openid.auth.uid з одноразовим ідентифікатором значення для перевірки цієї відповіді. Цей параметр зазначається в разі вказання параметра openid.auth.check у запиті на аутентифікацію.
У разі невдалої аутентифікації виконується перехід за вказаним URL без додавання будь-яких параметрів.
Виконати перевірку відповіді OpenID-провайдера
Опис:
Виконує перевірку відповіді OpenID-провайдера для запитів cmd=auth і cmd=lookup у разі передавання в запиті параметра openid.auth.check зі значенням true.
Синтаксис:
https://hostname/ProviderIB/e1cib/oid2op?cmd=check
Параметри:
openid.auth.user обов'язковий
Ім'я користувача, отримане з однойменного параметра запиту.
openid.auth.uid обов'язковий
Значення одноразового ідентифікатора відповіді OpenID-провайдера, отримане з однойменного параметра запиту.
Значення, що повертається:
Повертається документ типу text/plain такого вмісту:
- is_valid:true – відповідь дійсно сформована поточним OpenID-провайдером. При цьому код стану HTTP дорівнюватиме 200.
- is_valid:false – поточний OpenID-провайдер не формував відповідь на перевірку. При цьому код стану HTTP дорівнює 400.
Запит скасування аутентифікації для залежної сторони
Опис:
Виконує скасування аутентифікації в разі невідомого URL OpenID-провайдера. Завершує поточний сеанс, скасовує аутентифікацію на OpenID-провайдері, перезапускає вебклієнт. Вебклієнт виконає запит скасування аутентифікації для OpenID-провайдера.
Синтаксис:
https://hostname/RPIB/e1cib/oid2op?cmd=logout
Запит скасування аутентифікації для OpenID-провайдера
Опис:
Виконує скасування аутентифікації на зазначеному OpenID-провайдері.
Синтаксис:
https://hostname/ProviderIB/e1cib/oid2op?cmd=logout
Параметри:
openid.return_to необов'язковий
Містить URL, на який виконується перехід після обробки запиту.
Значення, що повертається:
Якщо зазначено параметр openid.return_to, виконується переадресація на вказаний URL, інакше повертається порожня відповідь із кодом стану HTTP, що дорівнює 200.
Вимоги до зовнішніх OpenID-провайдерів
За потреби використання зовнішніх щодо системи OpenID-провайдерів, які планується застосовувати для аутентифікації користувачів інформаційних баз, необхідно враховувати такі особливості:
1. OpenID-провайдер має підтримувати специфікації протоколу OpenID Authentication 2.0 та розширення цього протоколу, реалізоване в системі.
2. Для роботи за допомогою тонкого клієнта системи OpenID-провайдер має використовувати файл cookie з ім'ям vrs_oid2op_auth.
3. У разі отримання запиту з HTTP-заголовком Accept, який забороняє використання HTML-контенту у відповіді, OpenID-провайдер не має використовувати перенаправлення з використанням HTML-форм (розділ 5.2.2 специфікації протоколу OpenID Authentication 2.0).
4. OpenID-провайдер під час повернення інформаційним базам системи параметрів openid.claimed_id та openid.identity має встановлювати значення цих параметрів у форматі <адреса OpenID-провайдера>?lid=<логін-користувача>, наприклад https://myserver.org/users-ib/e1cib/oid2op?lid=user1.
Також може бути корисно врахувати такі особливості:
- Під час звернення інформаційної бази BAS до OpenID-провайдера в параметрах запиту openid.claimed_id та openid.identity завжди передається значення https://specs.openid.net/auth/2.0/identifier_select.
- Інформаційна база BAS не використовує для перевірки автентичності повідомлень провайдера загальний секретний ключ (за алгоритмом Діффі-Хеллмана). Перевірка автентичності виконується через прямий запит до OpenID-провайдера відповідно до вимог розділу 11.4.2 специфікації протоколу OpenID Authentication 2.0.