Настройка SSO Авторизации Для BookStack
Одним из наиболее удачных сервисов (среди мне известных) для хранения внутренней документации является BookStack. По тому как его развернуть и выполнить Базовую настройку можно прочитать на ОФ сайте, там прекрасная документация. Но вот вопрос настройки авторизации SSO используя ADFS информация достаточно поверхностная, да и то что в инете можно найти требует достаточно глубоких знаний темы. Посему решил поделиться компиляцией информации по данному вопросу
Настройка BookStack
Не требуется много настроек, просто отредактируйте .env
файл,
nano /var/www/bookstack/.env
Добавив в конец файла следующее содержимое:
AUTH_METHOD=saml2
AUTH_AUTO_INITIATE=true
SAML2_NAME=ADFS
SAML2_EMAIL_ATTRIBUTE=mail
SAML2_EXTERNAL_ID_ATTRIBUTE=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn
SAML2_DISPLAY_NAME_ATTRIBUTES=displayName
SAML2_IDP_ENTITYID=https://adfs.*****.com/FederationMetadata/2007-06/FederationMetadata.xml
SAML2_AUTOLOAD_METADATA=true
SAML2_IDP_SSO=https://adfs.******.com/adfs/ls
SAML2_IDP_SLO=null
SAML2_IDP_AUTHNCONTEXT=true
SAML2_USER_TO_GROUPS=true
SAML2_GROUP_ATTRIBUTE=groups
SAML2_REMOVE_FROM_GROUPS=false
#APP_DEBUG=true
#SAML2_DUMP_USER_DETAILS=true
#SAML2_ONELOGIN_OVERRIDES=
Настройка ADFS Сервера
Создадим Relaying Party trusts
Откроем оснастку Relaying Party trusts после Нажмем Add Relaying Party trusts
Далее выбираем Claims aware жмем Start
Выберем Источник данных
Выбираем пункт Enter data about the relying parity manually
Зададим Display Name
Даем Любое понятное название в поле Display Name
Кофигурация Сертификатов
Пропускаем конфигурацию сертификата нажав next
Конфигурация URL
Выберем пункт «Enable support for the SAML2.0» после чего в поле укажем
https://book.***Ваш домен***.com/saml2/acs
Cконфигурируем идентификаторы
В поле Relying party trust identifilers вставим
https://book.*******.com/saml2/metadata
и нажмем ADD
Выберем политику авторизации
в предстаавленном списке выберем Permit everyone
На вкладке finish Уберем галочку напротив Configure claims issuance policy for this application
Настройка Точек подключения
Откроем свойства созданного Party trusts и перейдем во вклаку Endpoints
Проверим созданную assertion consumer endpoint
После чего создадим Logout Endpoints для этого нажмем
и заполним в соответствии с скриншотом
Настройка выдачи требований
Создадим правило соответствия полей значений
в появившемся окне нажмите Add Rule
Заполняем поле следующим образом
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", "mail", "groups", "displayName"), query = ";userPrincipalName,otherMailbox,tokenGroups,displayName;{0}", param = c.Value);
Создадим правило преобразования значения
нажмите Add Rule
Заполняем поле следующим образом
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn"]
=> issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress");
Готово, можно проверять
Траблшуттинг
для тестирования работы ADFS, чтобы посмотреть в браузере в формате json информацию которую возвращает ADFS Сервер можно раскоментировать в файле .env
APP_DEBUG=true
SAML2_DUMP_USER_DETAILS=true
SAML2_ONELOGIN_OVERRIDES=
В этом режиме АВТОРИЗАЦИЯ БУДЕТ ОТКЛЮЧЕНА