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

5f0cb444b80b77300cf603b8958566dc.png

Далее выбираем Claims aware  жмем Start

Выберем Источник данных

Выбираем пункт Enter data about the relying parity manually

0f35817f19d5fb1a7a77e9b0eb5531fc.png

Зададим Display Name

Даем Любое понятное название в поле Display Name

e879601cefdc449d14b42dbbd72bb7e3.png

Кофигурация Сертификатов

Пропускаем конфигурацию сертификата  нажав next

Конфигурация URL

 Выберем пункт «Enable support for the SAML2.0» после чего в поле укажем 

https://book.***Ваш домен***.com/saml2/acs

8334377484c416282048743c117f7e2b.png

Cконфигурируем  идентификаторы

 В поле Relying party trust identifilers вставим 

https://book.*******.com/saml2/metadata

и нажмем ADD

11d7bb9154815f3e604c06fcb2c515dd.png

Выберем политику авторизации

в предстаавленном списке выберем Permit everyone 

2f2b9c97642311eccca8904501d4d1ec.png

На вкладке finish Уберем галочку напротив Configure claims issuance policy for this application

48a3e62ad5774f870cff461df395964d.png

Настройка Точек подключения

 Откроем свойства  созданного Party trusts и перейдем во вклаку Endpoints

70debf9acb41597b7aa5a1081177df4b.png

Проверим созданную   assertion consumer endpoint 

6ad7eb4687c710c9245b1fa2ecd0669e.png

После чего создадим Logout Endpoints для этого нажмем 

091d8325dc27e573b42d636dc30319c9.png

и заполним в соответствии с скриншотом

6cbc9d24e806697d834c87d2cfa8485f.png

Настройка выдачи  требований  

Создадим правило соответствия полей значений

в появившемся окне нажмите Add Rule 

2600e5c98005f072853f5bb3165ec7ef.png

Заполняем поле следующим образом 

7206d50cfa851002e2be32bdb4729e0a.pngf09516f7a0acf9483c2db498987925fd.png

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 

Заполняем поле следующим образом 

7500c32df42a0ecebce8493fc6ca6d60.pngd4504b6ae8174428f9b8e1ec44e7ac41.png

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=

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

© Habrahabr.ru