Общие сведения
Reverse Proxy – технология подключения веб-приложений к механизмам SSO и MFA, предоставляемым Avanpost FAM. Данный механизм предназначен для использования в ситуациях, когда требуется подключить к системе единой аутентификации унаследованное веб-приложение без поддержки стандартных протоколов OpenID Connect/OAuth, SAML либо RADIUS.
В режиме Reverse Proxy система SSO выступает в роли посредника (прокси-сервера), с которым взаимодействует пользователь, и который решает за пользователя задачу аутентификации и взаимодействия с веб-сервером непосредственно приложения.
Имеются следующие способы аутентификации, выполняемой сервером Avanpost FAM за пользователя:
- Без аутентификации – в этом случае система работает как обычный прокси-сервер, проксируя запросы пользователя на сервер без изменений. Дополнительных настроек не предполагается.
- Базовый – используется механизм HTTP Basic аутентификации согласно RFC 7617. Дополнительных настроек не предполагается.
- Пользовательский скрипт – используется механизм аутентификации с использованием JavaScript-сценария аутентификации.
- Форма – используется механизм аутентификации посредством эмуляции отправки HTTP Web Form.
Структура скрипта аутентификации
Для работы с использованием данного механизма требуется разработать и отладить скрипт аутентификации на языке JavaScript. Для разработки данного скрипта желательно обладать базовыми навыками программирования.
В окружении скрипта присутствуют следующие JavaScript-объекты:
| Объект | Метод/свойство | Пример вызова | Назначение |
|---|---|---|---|
context | GetCredentials() | credentials = context.GetCredentials(); | Вернуть объект credentials |
Send() | var response = context.Send({
url: "https://map.demo.avanpost.ru/api/auth",
method: 'GET',
headers: {
Accept: ['application/json; text/html'],
}
})
| Отправить синхронный HTTP-запрос и вернуть результат | |
SetCookies() | context.SetCookies([
{
"Name": "refresh_token",
"Value": "Value"
},
)
| Установить коллекцию Cookies | |
credentials | Username | Любая строковая операция | Свойство, содержащее имя учётной записи пользователя в приложении |
| Password | Любая строковая операция | Свойство, содержащее пароль учётной записи пользователя в приложении |
Пример скрипта аутентификации, выполняющего запрос на аутентификацию и подстановку данных в хранилище Cookies:
credentials = context.GetCredentials();
var loginUrl = 'https://map.demo.avanpost.ru/api/auth' + '?' + 'username=' + credentials.Username + '&password=' + encodeURIComponent(credentials.Password);
var response = context.Send(
{
url: loginUrl,
method: 'GET',
headers: {
Accept: ['application/json; text/html'],
}
})
var jsonObject = JSON.parse(response.body);
context.SetCookies(response.cookies);
context.SetCookies([
{
"Name": "refresh_token",
"Value": jsonObject.refresh_token
},
{
"Name": "access_token",
"Value": jsonObject.access_token
}
]);