Одним из наиболее удачных сервисов (среди мне известных ) для хранения внутренней документации является 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=<json_format_data>

Настройка 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=<json_format_data>

В этом режиме АВТОРИЗАЦИЯ БУДЕТ ОТКЛЮЧЕНА