Довідковий матеріал

Налаштування підтримки 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=&quot;tcp://Server&quot;;Ref=&quot;demo&quot;;"
                    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=&quot;tcp://Server&quot;;Ref=&quot;oidusers&quot;;"
        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.
Записатися телефоном