SUPPORT-8956: add security-backend(jwt...)
This commit is contained in:
parent
b87711ebcb
commit
4b8dce7f30
18 changed files with 580 additions and 336 deletions
219
config.md
219
config.md
|
|
@ -4,18 +4,11 @@
|
|||
|
||||
## Общие
|
||||
|
||||
- `webbpm.security.login.case_sensitive`. Default value = true. Параметр отвечающий за чувствительность к регистру при обработке логина пользователя.
|
||||
- true - Login и login, обрабатываются как разные логины.
|
||||
- false - Login и login, обрабатывается как один и тот же логин.
|
||||
- `webbpm.db.pool_size`. Нужен только для `webbpm.mode` = development.
|
||||
- `webbpm.mode`. Режим работы приложения. Значения - development, production.
|
||||
- development - в этом режиме используется соединение к БД проекта, заданное в Studio.
|
||||
- production - в этом режиме используется соединение к БД проекта, заданное с помощью jndi имени.
|
||||
|
||||
## Модуль BPMN
|
||||
|
||||
```bpmn.enable``` - по умолчанию true, отвечает за создание бинов использующих модуль bpmn (при флаге false можно убрать зависимости модуля, смотри **docs/ru/developer-guide/Отключение_bpmn_модуля.md**)
|
||||
|
||||
Пример:
|
||||
```xml
|
||||
<property name="bpmn.enable" value="false"/>
|
||||
|
|
@ -54,211 +47,29 @@
|
|||
<property name="webbpm.jbpm.runtime_strategy" value="PER_PROCESS_INSTANCE"/>
|
||||
```
|
||||
|
||||
## Способ аутентификации
|
||||
## Способы авторизации:
|
||||
|
||||
- authentication.method - способ аутентификации. Поддерживаемые способы аутентификации: form, kerberos, cert_over_db, cert_over_ldap
|
||||
- По Jwt токену, указанному в заголовке Authorization
|
||||
|
||||
### По логину и паролю
|
||||
### Настройка авторизации по JWT
|
||||
|
||||
Пример конфигурации:
|
||||
По умолчанию все верификации токена отключены. Для того, чтобы нстроить авторизацию, следует использовать
|
||||
следующие переменные среды:
|
||||
|
||||
```xml
|
||||
<property name="authentication.method" value="form"/>
|
||||
```
|
||||
| Название переменной | Тип | Описание | Пример | Значение по умолчанию |
|
||||
|------------------------------------|----------------|-------------------------------------------------------------------------------------------------------------------------------------|---------------------|-----------------------|
|
||||
| security.jwt.validation.enable | boolean | Включает базовую верификацию токена, включающее в себя поле exp. | true | false |
|
||||
| security.jwt.validation.issuer | String | Включает верификацию по issuer, включается только при security.jwt.validation.enable = true. При пустом значении не верифицируется. | https://example.com | null |
|
||||
| security.jwt.validation.public_key | String(base64) | Включает верификацию по ключу, включается только при security.jwt.validation.enable = true. При пустом значении не верифицируется. | ZGFzaGJvYXJk | null |
|
||||
| security.roles.allowed | String[] | Включает авторизацию по ролям. В случае, если пользователь не имеет ни одной указанной роли, доступ к ресурсам отклоняется | role1,role2,role3 | null |
|
||||
|
||||
### По сертификату
|
||||
## Настройка MFe:
|
||||
|
||||
- cert_over_db - проверка наличия пользователя в базе данных безопасности
|
||||
- cert_over_ldap - проверка наличия пользователя в базе данных безопасности и в LDAP
|
||||
Собранный образ фронтенда имеет возможность работать как полноценное standalone приложение, так и как удалённый модуль MFe. Для настройки Mfe следует указать следующие переменные:
|
||||
|
||||
Примеры:
|
||||
* MFE_BASE_URL - указывается frontend/.env, либо в переменных среды сборки приложения. При изменении переменной приложение надо пересобирать. По умолчанию /mfe/business-metrics
|
||||
* backend.url - если необходимо настроить url бэкенда, его можно указать в frontend/src/resources/app.config.json
|
||||
|
||||
```xml
|
||||
<property name="authentication.method" value="cert_over_db"/>
|
||||
<property name="authentication.method" value="cert_over_ldap"/>
|
||||
```
|
||||
|
||||
Параметр способа аутентификации authentication.method должен быть также установлен на клиентской части приложения в app-config.json
|
||||
|
||||
Также для аутентификации по сертификату нужны свойства для хранилища сертификатов:
|
||||
|
||||
- certificate.keystore.location - путь до java key store. Key store - это хранилище доверенных сертификатов, с помощью которых можно проверить корневой сертификат. Сертификат устанавливается с помощью команды:
|
||||
|
||||
```text
|
||||
keytool -importcert -alias myAlias -file Example.cer -keystore exampleKeyStore
|
||||
```
|
||||
|
||||
- certificate.keystore.password - пароль для keystore, установленный при импорте сертификата
|
||||
|
||||
Примеры:
|
||||
|
||||
```xml
|
||||
<property name="certificate.keystore.location" value="${jboss.home.dir}/mfc"/>
|
||||
<property name="certificate.keystore.password" value="mfc_auth"/>
|
||||
```
|
||||
|
||||
### Kerberos
|
||||
|
||||
Получите от администратора Kerberos .keytab файл, из которого командой `klist -k http.keytab` можно получить список principal-ов
|
||||
Проверить успешность авторизации principal-а можно командой `kinit -t -i http.keytab %principal%`.
|
||||
В
|
||||
случае успешной авторизации команда `klist` в качестве default principal которым проводилась авторизация.
|
||||
После этого в standalone.xml поправить параметр `app.service-principal` на principal, которым успешно авторизовались. principal имеет формат: `HTTP/%hostname%@%REALM%`
|
||||
|
||||
Пример конфигурации:
|
||||
|
||||
```xml
|
||||
<property name="app.service-principal" value="HTTP/oleg-rxserver.alt.dom@ALT.DOM"/>
|
||||
<property name="app.keytab-location" value="${jboss.home.dir}/http.keytab"/>
|
||||
<property name="authentication.method" value="kerberos"/>
|
||||
```
|
||||
|
||||
- app.service-principal. Пример - HTTP/oleg-rxserver.alt.dom@ALT.DOM
|
||||
- app.keytab-location - расположение keytab файла. Пример - ${jboss.home.dir}/
|
||||
- http.keytab.
|
||||
|
||||
Также необходимо в настройках браузера на клиенте задать параметр `network.negotiate-auth.trusted-uris` задать значение `.%domain%`.
|
||||
Пример:
|
||||
|
||||
```xml
|
||||
.ALT.DOM
|
||||
```
|
||||
|
||||
### Ldap
|
||||
|
||||
Аутентификация происходит посредством логина и пароля синхронизированного пользователя Ldap.
|
||||
Логин и пароль введенные в форму входа, будут проверены сервисом Ldap.
|
||||
|
||||
Пример конфигурации:
|
||||
|
||||
```xml
|
||||
<property name="ldap.url" value="ldap://localhost:389"/>
|
||||
<property name="ldap.base" value="dc=example,dc=org"/>
|
||||
<property name="ldap.username" value="cn=admin,dc=example,dc=org"/>
|
||||
<property name="ldap.password" value="admin"/>
|
||||
<property name="authentication.method" value="form"/>
|
||||
```
|
||||
|
||||
#### Настройка сервера приложений для работы с Kerberos
|
||||
|
||||
1. создать учетные записи в домене:
|
||||
|
||||
- тестовые для проверки работоспособности функционала (пользователи домена, почтовые ящики):
|
||||
|
||||
`User1 pass1 user1@example.com`
|
||||
|
||||
`User2 pass2 user2@example.com`
|
||||
|
||||
- сервисную для доступа сервиса(приложения) к MS AD - (пользователь домена - снять устаревание пароля, ограничение по времени действия, почтовый ящик):
|
||||
|
||||
`serviceUser servicePass serviceuser@example.com`
|
||||
|
||||
---
|
||||
|
||||
2. завести учетную запись машины `appserver.machine.name` (fqdn-имя сервиса) в AD (вручную, как запись в computer) и в DNS (A-запись)
|
||||
|
||||
`appserver.machine.name 10.250.216.91`
|
||||
|
||||
3. сгенерировать keytab (утилита ktpass) для аутентификации сервисов(приложения) для единой точки входа - `serviceUser` - с именем test.file.name.keytab - привязав к ней пользователя serviceUser
|
||||
|
||||
например, так:
|
||||
|
||||
```
|
||||
ktpass -princ http/appserverMachineName.example.com@example.com -mapuser example.com\serviceUser -pass "пароль_уз_serviceUser" -crypto All -ptype KRB5_NT_PRINCIPAL -out "путь_к_директории_выгрузки_файла\test.file.name.keytab"
|
||||
```
|
||||
|
||||
##### Kerberos FAQ
|
||||
|
||||
- В случае, если авторизация не проходит и в логах сервера приложений присутствует следующий вывод:
|
||||
|
||||
```
|
||||
2019-05-14 05:33:36,588 INFO [security.controller.KerberosAuthenticationController] (default task-3) Authentication request header Authorization not exists
|
||||
2019-05-14 05:33:36,588 INFO [security.controller.KerberosAuthenticationController] (default task-3) Authentication object is not presented
|
||||
```
|
||||
|
||||
необходимо проверить настройку браузера firefox `network.negotiate-auth.trusted-uris`, она должна соответствовать домену из principal-а.
|
||||
Для этого в поисковую строку браузера вводим "about:config", в открывшемся окне нажимаем "accept with risk and continue", в поисковой строке открывшейся страницы ввести `network.negotiate-auth.trusted-uris`.
|
||||
Пример: для principal-а `HTTP/oleg-rxserver.alt.dom@ALT.DOM` настройка в браузере должна быть `.alt.dom`, приложение в браузере должно открываться по `http:\\oleg-rxserver.alt.dom:8080\...`
|
||||
|
||||
- если в логах сервера приложений есть ошибка:
|
||||
|
||||
```xml
|
||||
2019-05-13 14:13:07,095 WARN [org.springframework.security.kerberos.web.authentication.SpnegoAuthenticationProcessingFilter] (default task-1) Negotiate Header was invalid: Negotiate TlRMTVNTUAABAAAAl4II4gAAAAAAAAAAAAAAAAAAAAAKAGNFAAAADw==: org.springframework.security.authentication.BadCredentialsException: Kerberos validation not successful
|
||||
...
|
||||
|
||||
Caused by: java.security.PrivilegedActionException: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
|
||||
at java.security.AccessController.doPrivileged(Native Method) [rt.jar:1.8.0_211]
|
||||
at javax.security.auth.Subject.doAs(Subject.java:422) [rt.jar:1.8.0_211]
|
||||
at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidator.validateTicket(SunJaasKerberosTicketValidator.java:68) [spring-security-kerberos-core-1.0.1.RELEASE.jar:1.0.1.RELEASE]
|
||||
... 66 more
|
||||
Caused by: GSSException: Defective token detected (Mechanism level: GSSHeader did not find the right tag)
|
||||
at sun.security.jgss.GSSHeader.(GSSHeader.java:97) [rt.jar:1.8.0_211]
|
||||
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:306) [rt.jar:1.8.0_211]
|
||||
at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:285) [rt.jar:1.8.0_211]
|
||||
at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidatorKerberosValidateAction.run(SunJaasKerberosTicketValidator.java:170) [spring-security-kerberos-core-1.0.1.RELEASE.jar:1.0.1.RELEASE]
|
||||
at org.springframework.security.kerberos.authentication.sun.SunJaasKerberosTicketValidatorKerberosValidateAction.run(SunJaasKerberosTicketValidator.java:153) [spring-security-kerberos-core-1.0.1.RELEASE.jar:1.0.1.RELEASE]
|
||||
... 69 more
|
||||
```
|
||||
|
||||
необходимо проверить правильность указанного в standalone.xml principal-а.
|
||||
|
||||
### Комбинации нескольких способов аутентификации
|
||||
|
||||
Приложение может обрабатывать запросы на несколько способов аутентификации. Для этого необходимо переичислить нужные профили через запятую.
|
||||
Примеры:
|
||||
|
||||
```xml
|
||||
<property name="authentication.method" value="form,cert_over_db"/>
|
||||
<property name="authentication.method" value="form,cert_over_ldap"/>
|
||||
<property name="authentication.method" value="kerberos,cert_over_db"/>
|
||||
<property name="authentication.method" value="kerberos,cert_over_ldap"/>
|
||||
```
|
||||
|
||||
### Время жизни токенов аутентификации
|
||||
|
||||
```xml
|
||||
<property name="webbpm.security.access_token.duration.minutes" value="60"/>
|
||||
<property name="webbpm.security.refresh_token.duration.days" value="30"/>
|
||||
<property name="webbpm.security.session.active.count" value="2"/>
|
||||
```
|
||||
|
||||
`webbpm.security.access_token.duration.minutes` - опциональный параметр (значение по умолчанию 60), время жизни в минутах, сколько будет действителен токен, после истечения этого времени токен будет обновлён `webbpm.security.refresh_token.duration.days` - опциональный параметр (значение по умолчанию 30), время жизни в днях, после истечения этого времени с последнего обновления, пользователю будет необходимо повторно войти `webbpm.security.session.active.count` - опциональный параметр (значение по умолчанию 1), количество сохраняемых в базу токенов обновления (количество активных сессий)
|
||||
|
||||
Примечания.
|
||||
|
||||
- Нельзя использовать одновременно профили cert_over_db c cert_over_ldap и kerberos с form.
|
||||
|
||||
## Синхронизация пользователей с LDAP
|
||||
|
||||
```xml
|
||||
<property name="ldap.auto.sync.enabled" value="true"/>
|
||||
<property name="ldap.synchronizer.cron" value="0 0 * * * *"/>
|
||||
<property name="ldap.url" value="ldap://localhost:389"/>
|
||||
<property name="ldap.base" value="dc=alt,dc=dom"/>
|
||||
<property name="ldap.username" value="uid=test,ou=People,dc=alt,dc=dom"/>
|
||||
<property name="ldap.password" value="password"/>
|
||||
<property name="webbpm.ldap.implementation" value="open-ldap"/>
|
||||
```
|
||||
|
||||
Настройки подключения к LDAP:
|
||||
|
||||
- `ldap.auto.sync.enabled` - включает/отключает автоматическую синхронизацию с LDAP
|
||||
- `ldap.synchronizer.cron` - cron расписание автоматической синхронизации с LDAP
|
||||
- `ldap.url`. Пример - ldap://localhost:389
|
||||
- `ldap.base`. Пример - dc=alt,dc=dom
|
||||
- `ldap.username`. Пример - uid=test,ou=People,dc=alt,dc=dom
|
||||
- `ldap.password`
|
||||
- `webbpm.ldap.implementation`. Допускается два значения: open-ldap и active-directory.
|
||||
|
||||
## WEBGUARD
|
||||
|
||||
Для синхронизации пользователей в WEBGUARD и для корректной работы админки необходимо указать настройки соединения к REST API WEBGUARD
|
||||
|
||||
```xml
|
||||
<property name="webguard.url" value="http://wg-host:8081/security-manager"/>
|
||||
<property name="webguard.user.login" value="wg-user"/>
|
||||
<property name="webguard.user.password" value="wg-password"/>
|
||||
```
|
||||
|
||||
## Статистика
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue