Сервер OpenID Connect
Сервер OpenID Connect предназначен для аутентификации пользователей в веб-приложениях Indeed CM по протоколу OpenID Connect.
Является обязательным для инсталляций системы под управлением ОС Linux и дополнительным для инсталляций под управлением ОС Windows.
OpenID Connect (OIDC) - это протокол аутентификации и авторизации, разработанный на основе OAuth 2.0, который добавляет слой идентификации к протоколу OAuth. Он позволяет приложениям проверять идентичность пользователя и получать информацию о нем от провайдера идентификации (Identity Provider, IdP).
- ОС Windows
- ОС Linux
Установите сервер OIDC из дополнительного пакета IndeedCM.Oidc.Server-<номер версии>.x64.ru-ru.msi. После установки выполните следующие действия:
- Загрузите сертификат подписи JWT-токенов.
- Настройте конфигурационный файл appsettings.json.
Сертификат подписи JWT-токенов
- Поместите сертификат подписи JWT-токенов в хранилище Локальный компьютер - Личное. В качестве сертификата подписи можно использовать SSL/TLS-сертификат, например, используемый для работы веб-сервера Indeed CM.
- Предоставьте IIS полный доступ к закрытому ключу сертификата подписи:
- Перейдите в оснастку Сертификаты (Certificates) компьютера, на котором установлен сервер OIDC.
- Кликните правой кнопкой мыши на сертификате, выберите Все задачи (All tasks) → Управление закрытыми ключами... (Manage Private Keys...).
- Нажмите Добавить (Add), укажите сервер в меню Размещение (Location), укажите локальную группу IIS_IUSRS в поле Введите имена выбранных объектов (Enter the object names to select), нажмите Проверить имена (Check Names) и ОК.
- Выставите права Полный доступ (Full Control) и Чтение (Read).
- Нажмите Применить (Apply).
Настройка файла appsettings.json
Настройте конфигурационный файл сервера OIDC через Мастер настройки Indeed CM в разделе Контроль доступа - OpenID Connect. После завершения работы Мастера создается файл appsettings.json (C:\inetpub\wwwroot\cm\oidc\appsettings.json).
В секции authentication
файла appsettings.json указан метод аутентификации пользователей, который будет использовать сервер OIDC. Выберите один из методов: Windows или WindowsCustom. Мастер настройки выставляет значение Windows.
Метод Windows используется, если сервер Indeed CM развернут на доменной рабочей станции под управлением ОС Windows.
Метод WindowsCustom используется, если сервер Indeed CM развернут вне домена или пользователи домена Active Directory находятся за пределами домена сервера Indeed CМ, и с сервером нет трастовых отношений.
По умолчанию сервер 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"provider
: "mssql"
Создайте базу данных в СУБД и настройте в файле подключение к этой базе данных. Если вы используете файл PGPASS, не включайте директиву Password
в строку подключения:
defaultConnection
: "Host=172.17.0.11;Port=5432;Database=oidcdb;Username=servicepg;Password=p@ssw0rd"provider
: "pgsql"
Перезагрузите сервер OIDC, чтобы применить изменения в конфигурационном файле.
Пример заполненного файла конфигурации для ОС Windows
{
"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-токенов
В качестве сертификата подписи можно использовать SSL/TLS-сертификат, например, используемый для работы веб-сервера Indeed CM.
В ОС Linux сертификат использует пользователь, от имени которого запускается сервер OIDC (по умолчанию www-data).
Поместите сертификат вместе с закрытым ключом в файл формата PFX в поддиректорию домашнего каталога данного пользователя ~/.dotnet/corefx/cryptography/x509stores/my/ и освободите файл сертификата от пароля.
Для создания такого файла используйте сертификат и закрытый ключ, созданные на этапе настройки веб-сервера NGINX или Apache, или создайте их заново с помощью следующих команд (подставьте имя импортированного файла PFX вместо PFXFILE.pfx):
mkdir -p ~/.dotnet/corefx/cryptography/x509stores/my/
openssl pkcs12 -in PFXFILE.pfx -chain -nokeys | sed -ne '/-BEGIN CERTIFICATE/,/END CERTIFICATE/p' > SSL.crt
openssl pkcs12 -in PFXFILE.pfx -nocerts -out SSLencrypted.key
openssl rsa -in SSLencrypted.key -out SSL.key
rm -f SSLencrypted.key
openssl pkcs12 -export -out ~/.dotnet/corefx/cryptography/x509stores/my/SSL.pfx -inkey SSL.key -in SSL.crt
Настройка файла appsettings.json
Настройте конфигурационный файл сервера OIDC через Мастер настройки Indeed CM в разделе Контроль доступа. После завершения работы Мастера создается файл appsettings.json (/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"provider
: "mssql"
Создайте базу данных в СУБД и настройте в файле подключение к этой базе данных. Если вы используете файл PGPASS, не включайте директиву Password
в строку подключения:
defaultConnection
: "Host=172.17.0.11;Port=5432;Database=oidcdb;Username=servicepg;Password=p@ssw0rd"provider
: "pgsql"
Перезагрузите сервер OIDC, чтобы применить изменения в конфигурационном файле.
Пример заполненного файла конфигурации для ОС Linux
{
"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-имя домена.