Настройка поддержки 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.