Сервер OpenID Connect
Сервер OpenID Connect предназначен для аутентификации пользователей в веб-приложениях Indeed CM по протоколу OpenID Connect.
Является обязательным для инсталляций системы под управлением ОС Linux и дополнительным для инсталляций под управлением ОС Windows.
OpenID Connect (OIDC) – это протокол аутентификации и авторизации, разработанный на основе OAuth 2.0, который добавляет слой идентификации к протоколу OAuth. Он позволяет приложениям проверять идентичность пользователя и получать информацию о нем от провайдера идентификации (Identity Provider, IdP).
Выберите инструкцию в зависимости от ОС, где установлен сервер Indeed CM.
- ОС Windows
- ОС Linux
Установите сервер OIDC из дополнительного пакета IndeedCM.Oidc.Server-<номер версии>.x64.ru-ru.msi. После установки:
- Загрузите сертификат подписи JWT-токенов.
- Настройте конфигурационный файл appsettings.json.
Сертификат подписи JWT-токенов
В качестве сертификата подписи используйте сертификат и закрытый ключ, созданные для веб-сервера.
Чтобы подготовить сертификат подписи:
- Поместите сертификат подписи в хранилище Локальный компьютер - Личное.
- Предоставьте IIS полный доступ к закрытому ключу сертификата подписи:
- Перейдите в оснастку Сертификаты (Certificates) компьютера, на котором установлен сервер OIDC.
- Кликните правой кнопкой мыши на сертификате, выберите Все задачи (All tasks) → Управление закрытыми ключами... (Manage Private Keys...).
- Нажмите Добавить (Add).
- В меню Размещение (Location) укажите сервер.
- В поле Введите имена выбранных объектов (Enter the object names to select) укажите локальную группу IIS_IUSRS.
- Нажмите Проверить имена (Check Names) и ОК.
- Выставите права Полный доступ (Full Control) и Чтение (Read).
- Нажмите Применить (Apply).
Настройка файла appsettings.json
Настройте конфигурацию сервера OIDC:
- Запустите Мастер настройки.
- Перейдите в раздел Контроль доступа→OpenID Connect.
- Укажите следующие настройки:
- URL подключения к серверу OpenID Connect.
- Полное доменное имя (FQDN) сервера Indeed CM. Для конфигурации с несколькими серверами укажите их полные доменные имена через запятую.
- Отпечаток сертификата подписи.
- При необходимости сгенерируйте клиентские секреты.
- Примените настройки.
После завершения работы Мастера в директории C:\inetpub\wwwroot\cm\oidc создается конфигурационный файл appsettings.json.
Аутентификация
В секции authentication
файла appsettings.json указан метод аутентификации пользователей, который будет использовать сервер OIDC. Выберите один из методов: Windows или WindowsCustom. Мастер настройки выставляет значение Windows.
Подробнее об аутентификации Windows и Windows Custom
Выберите Windows, если сервер Indeed CM развернут на доменной рабочей станции под управлением ОС Windows.
Выберите WindowsCustom, если сервер Indeed CM развернут вне домена или пользователи домена, где находится каталог пользователей, находятся за пределами домена сервера Indeed CМ, и с сервером нет трастовых отношений.
База данных
По умолчанию сервер OIDC использует локальную базу данных SQLite. База данных SQLite используется для инсталляций с одним сервером Indeed CM. Данные сервера OIDC хранятся в каталоге C:\inetpub\wwwroot\cm\oidc\data.
Для инсталляций с несколькими серверами Indeed CM используйте базу данных Microsoft SQL или PostgreSQL. Измените секции defaultConnection
и provider
:
- SQLite
- Microsoft SQL
- PostgreSQL
Изменения не нужны. Секции имеют следующие значения:
defaultConnection
: "Filename=./data/oidc-server.sqlite3"provider
: "sqlite"
Создайте базу данных в СУБД и настройте в файле подключение к этой базе данных. В примере для подключения к базе данных используется SQL аутентификация:
defaultConnection
: "Data Source=172.17.0.10;Initial Catalog=oidcdb;Persist Security Info=True;User ID=servicesql;Password=p@ssw0rd;TrustServerCertificate=True"provider
: "mssql"
Перезагрузите сервер OIDC, чтобы применить изменения в конфигурационном файле.
Создайте базу данных в СУБД и настройте в файле подключение к этой базе данных. Если вы используете файл PGPASS, не включайте директиву Password
в строку подключения:
defaultConnection
: "Host=172.17.0.11;Port=5432;Database=oidcdb;Username=servicepg;Password=p@ssw0rd"provider
: "pgsql"
Перезагрузите сервер OIDC, чтобы применить изменения в конфигурационном файле.
Пример заполненного файла конфигурации
{
"pathBase": "/cm/oidc",
"culture": "ru",
"certHeaderName": "x-ssl-client-cert",
"connectionStrings": {
"defaultConnection": "Filename=./data/oidc-server.sqlite3"
},
"database": {
"provider": "sqlite"
},
"oidc": {
"clients": [
{
"clientId": "ManagementConsole",
"clientSecret": "9d5d705e1cf5c12b2a5432c5a40c711e6505e939ca2d7cf0df48fc505c022329",
"displayName": "Management console",
"type": "confidential",
"consentType": "implicit",
"permissions": [ "ept:authorization", "ept:token", "ept:logout", "gt:authorization_code", "rst:code", "scp:profile", "scp:roles" ],
"requirements": [ "ft:pkce" ],
"redirectUris": [ "https://server.demo.local/cm/mc/signin-oidc" ],
"postLogoutRedirectUris": [ "https://server.demo.local/cm/mc/signout-callback-oidc" ]
},
{
"clientId": "SelfService",
"clientSecret": "319e8b577563b7c6f27653d72b49659d16f06e0a150fd3a224002c778432319d",
"displayName": "Self-service",
"type": "confidential",
"consentType": "implicit",
"permissions": [ "ept:authorization", "ept:token", "ept:logout", "gt:authorization_code", "rst:code", "scp:profile", "scp:roles" ],
"requirements": [ "ft:pkce" ],
"redirectUris": [ "https://server.demo.local/cm/ss/signin-oidc" ],
"postLogoutRedirectUris": [ "https://server.demo.local/cm/ss/signout-callback-oidc" ]
},
{
"clientId": "WebApi",
"clientSecret": "9a9c56e5e8090c7fbcdffcc13537fc60d7a2f8547cc92131893e88cf08a7d5f9",
"displayName": "Web api",
"type": "confidential",
"consentType": "implicit",
"permissions": [ "ept:introspection" ],
"requirements": [],
"redirectUris": [],
"postLogoutRedirectUris": []
},
{
"clientId": "WebApiClient",
"clientSecret": null,
"displayName": "Web api client",
"type": "public",
"consentType": "implicit",
"permissions": [ "ept:token", "gt:password", "scp:profile", "scp:roles", "scp:webapi" ],
"requirements": [],
"redirectUris": [],
"postLogoutRedirectUris": []
}
],
"signingCertificateThumbprint": "fed6d86ce6caa079f80d1b6c089cddf109d19c2d",
"useEphemeralSigningKey": false,
"disableTransportSecurityRequirement": false,
"accessTokenLifetime": 43200,
"identityTokenLifetime": 43200,
"authentication": "Windows",
"allowRememberLogin": false
},
"ldap": {
"directories": [
{
"server": "DC_SERVER",
"port": 389,
"secureSocketLayer": false,
"verifyServerCertificate": false,
"authType": "Basic",
"userName": "ACCOUNT_NAME",
"password": "ACCOUNT_PASSWORD",
"domainDnsName": "DOMAIN_DNS_NAME",
"domainNetbiosName": "DOMAIN_NETBIOS_NAME"
}
]
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Сервер OIDC является частью дистрибутива Indeed CM и устанавливается вместе с сервером системы. После установки сервера OIDC:
- Подготовьте сертификат подписи JWT-токенов.
- Настройте конфигурационный файл appsettings.json.
Сертификат подписи JWT-токенов
В качестве сертификата подписи используйте сертификат и закрытый ключ, созданные для веб-сервера. Сертификат и закрытый ключ необходимо объединить в файл PFX, и поместить файл PFX в поддиректорию домашнего каталога пользователя, от имени которого запускается сервер OIDC.
По умолчанию сервер OIDC запускается от имени пользователя www-data. Поддиректория домашнего каталога пользователя www-data находится по пути /var/www/.dotnet/corefx/cryptography/x509stores/my/.
Убедитесь, что пользователь www-data существует: выполните /etc/passwd | grep www-data
.
Если пользователя www-data не существует, вы можете его создать или сменить пользователя, от имени которого запускаются сервисы Indeed CM.
Чтобы сменить пользователя, выполните /etc/systemd/system/cm-<имя сервиса>.service
.
Укажите имя пользователя в директиве User
.
Чтобы подготовить сертификат подписи:
Создайте поддиректорию домашнего каталога пользователя, от имени которого запускается сервер OIDC (www-data):
sudo mkdir -p /var/www/.dotnet/corefx/cryptography/x509stores/my/
Объедините файл сертификата и файл ключа в файл PFX. Поместите файл PFX в поддиректорию домашнего каталога пользователя.
cautionПри выполнении команды утилита openssl предлагает установить пароль для файла PFX. Оставьте файл PFX без пароля: два раза нажмите Enter.
sudo openssl pkcs12 -export -out /var/www/.dotnet/corefx/cryptography/x509stores/my/OIDC.pfx -inkey SSL.key -in SSL.crt
Получите отпечаток сертификата подписи:
sudo openssl x509 -fingerprint -in SSL.crt -noout | tr -d ':'
Пример вывода отпечатка сертификатаSHA1 Fingerprint=ADB613EC1A1692310D83C81F269C098A3DBD4EE0
Настройка файла appsettings.json
Настройте конфигурацию сервера OIDC:
- Запустите Мастер настройки.
- Перейдите в раздел Контроль доступа→OpenID Connect.
- Укажите следующие настройки:
- URL подключения к серверу OpenID Connect.
- Полное доменное имя (FQDN) сервера Indeed CM. Для конфигурации с несколькими серверами укажите их полные доменные имена через запятую.
- Отпечаток сертификата подписи.
- При необходимости сгенерируйте клиентские секреты.
- Примените настройки.
После завершения работы Мастера в директории /opt/indeed/cm/oidc создается конфигурационный файл appsettings.json.
База данных
По умолчанию сервер OIDC использует локальную базу данных SQLite. База данных SQLite используется для инсталляций с одним сервером Indeed CM. В этом случае данные сервера OIDC будут храниться в каталоге /opt/indeed/cm/oidc/data.
Для инсталляций с несколькими серверами Indeed CM используйте базу данных Microsoft SQL или PostgreSQL. Для этого измените секции defaultConnection
и provider
:
- SQLite
- Microsoft SQL
- PostgreSQL
Внесение изменений не требуется. Секции имеют следующие значения:
defaultConnection
: "Filename=./data/oidc-server.sqlite3"provider
: "sqlite"
Создайте базу данных в СУБД и настройте в файле подключение к этой базе данных. В примере для подключения к базе данных используется SQL аутентификация:
defaultConnection
: "Data Source=172.17.0.10;Initial Catalog=oidcdb;Persist Security Info=True;User ID=servicesql;Password=p@ssw0rd;TrustServerCertificate=True"provider
: "mssql"
Перезагрузите сервер OIDC, чтобы применить изменения в конфигурационном файле.
Создайте базу данных в СУБД и настройте в файле подключение к этой базе данных. Если вы используете файл PGPASS, не включайте директиву Password
в строку подключения:
defaultConnection
: "Host=172.17.0.11;Port=5432;Database=oidcdb;Username=servicepg;Password=p@ssw0rd"provider
: "pgsql"
Перезагрузите сервер OIDC, чтобы применить изменения в конфигурационном файле.
Пример заполненного файла конфигурации
{
"pathBase": "/cm/oidc",
"culture": "ru",
"certHeaderName": "x-ssl-client-cert",
"connectionStrings": {
"defaultConnection": "Host=172.17.0.11;Port=5432;Database=oidcdb;Username=servicepsql;Password=Q1w2e3r4"
},
"database": {
"provider": "pgsql"
},
"oidc": {
"clients": [
{
"clientId": "ManagementConsole",
"clientSecret": "6e08e2f151262ddd8db961a18a8d7f3bb2ecaf1ccdf6037b9292a358b56f2ff6",
"displayName": "Management console",
"type": "confidential",
"consentType": "implicit",
"permissions": [ "ept:authorization", "ept:token", "ept:logout", "gt:authorization_code", "rst:code", "scp:profile", "scp:roles" ],
"requirements": [ "ft:pkce" ],
"redirectUris": [ "https://astra-174-srv/cm/mc/signin-oidc" ],
"postLogoutRedirectUris": [ "https://astra-174-srv/cm/mc/signout-callback-oidc" ]
},
{
"clientId": "SelfService",
"clientSecret": "48f410e3268d418a89b3d21073fa4962c816adb19899365c3472eb24b1a876af",
"displayName": "Self-service",
"type": "confidential",
"consentType": "implicit",
"permissions": [ "ept:authorization", "ept:token", "ept:logout", "gt:authorization_code", "rst:code", "scp:profile", "scp:roles" ],
"requirements": [ "ft:pkce" ],
"redirectUris": [ "https://astra-174-srv/cm/ss/signin-oidc" ],
"postLogoutRedirectUris": [ "https://astra-174-srv/cm/ss/signout-callback-oidc" ]
},
{
"clientId": "WebApi",
"clientSecret": "e79b81d198478ccb852e8dd7f8ea62750e9626722942ba7dbb57a17119a7d5f0",
"displayName": "Web api",
"type": "confidential",
"consentType": "implicit",
"permissions": [ "ept:introspection" ],
"requirements": [],
"redirectUris": [],
"postLogoutRedirectUris": []
},
{
"clientId": "WebApiClient",
"clientSecret": null,
"displayName": "Web api client",
"type": "public",
"consentType": "implicit",
"permissions": [ "ept:token", "gt:password", "scp:profile", "scp:roles", "scp:webapi" ],
"requirements": [],
"redirectUris": [],
"postLogoutRedirectUris": []
}
],
"signingCertificateThumbprint": "A85869C270CB2BDB113A28ADF24522A6EC55FF02",
"useEphemeralSigningKey": false,
"disableTransportSecurityRequirement": false,
"accessTokenLifetime": 43200,
"identityTokenLifetime": 43200,
"authentication": "WindowsCustom",
"allowRememberLogin": false
},
"ldap": {
"directories": [
{
"server": "demo.local",
"port": 389,
"secureSocketLayer": false,
"verifyServerCertificate": false,
"authType": "Basic",
"userName": "DEMO\\servicecm",
"password": "Q1w2e3r4",
"domainDnsName": "demo.local",
"domainNetbiosName": "DEMO"
}
]
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Параметры файла appsettings.json
В файле заполнены секции и параметры, необходимые для работы Indeed CM:
- В параметре
signingCertificateThumbprint
указывается отпечаток сертификата подписи JWT-токенов. - В секции
clients
Мастер настройки заполняет параметрыclientSecret
(секреты - это пароли, разрешенные для предъявления приложениям системы),redirectUris
иpostLogoutRedirectUris
для корректной маршрутизации между OIDC и соответствующими веб-приложениями Indeed CM. - В секции
authentication
указан метод аутентификации пользователей, который будет использовать сервер OIDC – WindowsCustom. - Секция
ldap
заполняется, если в качестве метода аутентификации пользователей выбран WindowsCustom. В случае прохождения Мастером настройки секции заполняются автоматически, в случае ручной настройки укажите:server
– имя хоста или IP-адрес LDAP-сервера.port
– обычно LDAP-сервер принимает входящие соединения на порт 389 по протоколам TCP или UDP. Для LDAP-сеансов, инкапсулированных в SSL, обычно используется порт 636.secureSocketLayer
– опция для включения или отключения SSL (Secure Sockets Layer) для защищенного соединения.verifyServerCertificate
– опция для включения или отключения проверки сертификата сервера при использовании SSL.authType
– тип аутентификации, который будет использоваться при подключении к LDAP-серверу.userName
– имя сервисной учетной записи для работы с каталогов пользователем в форматеИмя домена (NetBIOS)\имя учетной записи
.password
– пароль от сервисной учетной записи.domainDnsName
– DNS-имя домена.domainNetbiosName
– NetBIOS-имя домена.
Выполните в командной строке:
set USERDNSDOMAIN
, чтобы узнать DNS-имя домена.
set USERDOMAIN
, чтобы узнать NetBIOS-имя домена.