Kerberos - Настройка доменной авторизации для нескольких доменов

Настройка файлов конфигурации AD


Рассмотрим на примере: Приложением пользуются сотрудники из двух разных доменов, и web-сайт размещён в другой отдельной доменной зоне:

Домены: KUBIK.COM и RUBIK.COM

Web-сайт: doczilla.kubikrubik.com  (или может находиться в одном из рассматриваемых доменов, например:  doczilla.kubik.com)

1. На контроллере AD  каждого домена создать техническую учетную запись пользователя и добавить Service Principal Names (SPN) для него

Логин:        doczilla
Пароль:    doczPswd!

описание команды:  https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc731241(v=ws.11)

пример команды:

setspn -A HTTP/doczilla.kubikrubik.com  doczilla

2. На сервере приложения создать в  /opt/doczilla/cong/spnego/ отдельные директории под каждый домен и скопировать туда по 2 конфигурационных файла (jaas.conf, krb5.ini)

cd /opt/doczilla/cong/spnego/

mkdir /opt/doczilla/conf/spnego/kubik.com

cp ./jaas.conf ./kubik.com/

cp ./krb5.ini  ./kubik.com/

mkdir /opt/doczilla/conf/spnego/rubik.com

cp ./jaas.conf ./rubik.com/

cp ./krb5.ini  ./rubik.com/

3. На контроллере AD  каждого домена создать отдельный  «krb5.keytab» 

описание команды:  https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/ktpass

пример команды:

ktpass -princ HTTP/doczilla.kubikrubik.com@KUBIK.COM -mapuser doczilla@kubik.com -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass doczPswd! -out c:\temp\kubik\krb5.keytab

ktpass -princ HTTP/doczilla.kubikrubik.com@RUBIK.COM -mapuser doczilla@rubik.com -crypto ALL -ptype KRB5_NT_PRINCIPAL -pass doczPswd! -out c:\temp\rubik\krb5.keytab

Полученные файлы скопировать на сервер приложения в свои соответствующие папки:

/opt/doczilla/conf/spnego/kubik.com/

/opt/doczilla/conf/spnego/rubik.com/

Если в домене используется шифрование AES256-SHA1. Необходимо в Свойствах технической системной учетной записи в AD поставить галку «Поддержка Kerberos AES 256»


4. Необходимо отредактировать под свой домен все шаблоны конфигурационных файлов согласно комментариям внутри файлов:

  • jaas.conf
  • krb5.ini

(при обновлении проекта шаблоны файлов не перезаписывать)

5. В файле проекта ./bin/service.sh 

- Включите режим расширенных логов для отладки, раскомментируйте:

DEBUG="true"

- Включите режим мультидоменной авторизации:

SSO="MULTISPNEGO"

- Замените наименование домена, в переменной (обязательно Большими Буквами). Указываем не домены пользователей, а который один для всех:

DOMAIN="KUBIKRUBIK.COM"



6. Добавление сайта в доверенную зону

Для работы доменной авторизации запрошенный URL-адрес должен находится в интрасети (локальной).

описание:  https://docs.microsoft.com/en-us/troubleshoot/browsers/prompt-for-username-and-password

Запустите "Панель управления" - "Свойства браузера" - вкладка "Безопасность" - естная интрасеть" - кнопка "Сайты" - кнопка "Дополнительно" - добавить в зону сайт приложения doczilla.kubikrubik.com - кнопка "Добавить" - "Закрыть"



7. Пример конфигов для мультидоменной авторизации


Пример файла jaas.conf для домена KUBIK.COM

com.sun.security.jgss.initiate {
     com.sun.security.auth.module.Krb5LoginModule required
     principal="HTTP/doczilla.kubikrubik.com@KUBIK.COM"
     keyTab="/opt/doczilla/conf/spnego/kubik.com/krb5.keytab"
     useKeyTab=true
     storeKey=true
     debug=true
     isInitiator=false;
};

com.sun.security.jgss.accept {
     com.sun.security.auth.module.Krb5LoginModule required
     principal="HTTP/doczilla.kubikrubik.com@KUBIK.COM"
     keyTab="/opt/doczilla/conf/spnego/kubik.com/krb5.keytab"
     useKeyTab=true
     storeKey=true
     debug=true
     isInitiator=false;
};

Пример файла krb5.ini  для домена KUBIK.COM

[libdefaults]
default_realm = KUBIK.COM
default_keytab_name = FILE:/opt/doczilla/conf/spnego/kubik.com/krb5.keytab
permitted_enctypes = aes128-cts aes256-cts arcfour-hmac-md5
default_tgs_enctypes = aes128-cts aes256-cts arcfour-hmac-md5
default_tkt_enctypes = aes128-cts aes256-cts arcfour-hmac-md5

# replace. kdc - Key distribution center
[realms]
KUBIK.COM = {
    kdc = kubik.com
    admin_server = kubik.com
    default_domain = kubik.com
}
# replace
[domain_realm]
.kubik.com = KUBIK.COM

[appdefaults]
autologin = true
forwardable = true

Пример файла jaas.conf для домена RUBIK.COM

com.sun.security.jgss.initiate {
     com.sun.security.auth.module.Krb5LoginModule required
     principal="HTTP/doczilla.kubikrubik.com@RUBIK.COM"
     keyTab="/opt/doczilla/conf/spnego/rubik.com/krb5.keytab"
     useKeyTab=true
     storeKey=true
     debug=true
     isInitiator=false;
};

com.sun.security.jgss.accept {
     com.sun.security.auth.module.Krb5LoginModule required
     principal="HTTP/doczilla.kubikrubik.com@RUBIK.COM"
     keyTab="/opt/doczilla/conf/spnego/rubik.com/krb5.keytab"
     useKeyTab=true
     storeKey=true
     debug=true
     isInitiator=false;
};

Пример файла krb5.ini  для домена RUBIK.COM 

[libdefaults]
default_realm = RUBIK.COM
default_keytab_name = FILE:/opt/doczilla/conf/spnego/rubik.com/krb5.keytab
permitted_enctypes = aes128-cts aes256-cts arcfour-hmac-md5
default_tgs_enctypes = aes128-cts aes256-cts arcfour-hmac-md5
default_tkt_enctypes = aes128-cts aes256-cts arcfour-hmac-md5

# replace. kdc - Key distribution center
[realms]
RUBIK.COM = {
    kdc = rubik.com
    admin_server = rubik.com
    default_domain = rubik.com
}
# replace
[domain_realm]
.rubik.com = RUBIK.COM

[appdefaults]
autologin = true
forwardable = true