- Created by Ivan Lobanov, last modified by Vladimir Gololobov on Dec 12, 2023
Данный компонент предназначен для аутентификации пользователей в web-приложениях системы по протоколу OpenID Connect и является обязательным для инсталляций системы под управлением ОС Linux и дополнительным для инсталляций под управлением ОС Windows.
OpenID Connect (OIDC) - это протокол аутентификации и авторизации, разработанный на основе OAuth 2.0, который добавляет слой идентификации к протоколу OAuth. Он позволяет приложениям проверять идентичность пользователя и получать информацию о нем от провайдера идентификации (Identity Provider, IdP).
Установка сервера OIDC
- На ОС Windows сервер OIDC устанавливается из дополнительного пакета IndeedCM.Oidc.Server-<номер версии>.x64.ru-ru.msi.
- На ОС Linux сервер OIDC устанавливается вместе с сервером системы, являясь частью дистрибутива.
Настройка сервера OIDC
Отредактируйте файл appsettings.json, который находится по следующему пути:
- Для ОС Windows: C:\inetpub\wwwroot\cm\oidc\appsettings.json
- Для ОС Linux: /opt/indeed/cm/oidc/appsettings.json
Откройте файл appsettings.json в текстовом редакторе, запущенном от имени Администратора:
- По умолчанию, после установки, подключение к базе данных сервера OIDC настроено на использование SQLite. В этом случае данные сервера OIDC будут храниться локально, в каталоге /opt/indeed/cm/oidc/data. Если требуется использовать базу данных Microsoft SQL или PostgreSQL, заполните секции "defaultConnection" и "provider".
- SQLite. Внесение изменений не требуется. Секции имеют следующие значения:
- "defaultConnection": "Filename=./data/oidc-server.sqlite3"
- "provider": "sqlite"
- Microsoft SQL. Для использования Microsoft SQL, создайте базу данных и настройте подключение к ней (в примере, для подключения к базе данных используется SQL аутентификация):
- "defaultConnection": "Data Source=172.17.0.10;Initial Catalog=oidcdb;Persist Security Info=True;User ID=servicesql;Password=p@ssw0rd"
- "provider": "mssql"
- PostgreSQL. Для использования PostgreSQL, создайте базу данных и настройте подключение к ней:
- "defaultConnection": "Host=172.17.0.11;Port=5432;Database=oidcdb;Username=servicepg;Password=p@ssw0rd"
- "provider": "pgsql"
- SQLite. Внесение изменений не требуется. Секции имеют следующие значения:
- Заполните секции "clientSecret", "redirectUris" и "postLogoutRedirectUris" в "clients". В качестве клиентов выступают приложения Indeed CM: ManagementConsole, Self-Service и WebApi:
"clientSecret" - генерируется Мастером настройки Indeed CM для каждого приложения. Значения доступны в файле oidc_secrets.json, который будет создан в директории конфигурационных файлов Мастера настройки.
Пример файла oidc_secrets.json{ "managementConsoleClientSecret": "9d5d705e1cf5c12b2a5432c5a40c711e6505e939ca2d7cf0df48fc505c022329", "selfServiceClientSecret": "319e8b577563b7c6f27653d72b49659d16f06e0a150fd3a224002c778432319d", "webApiClientSecret": "9a9c56e5e8090c7fbcdffcc13537fc60d7a2f8547cc92131893e88cf08a7d5f9" }
- "redirectUris". Вместо REDIRECT_URL укажите FQDN сервера Indeed CM: "https://REDIRECT_URL/cm/mc/signin-oidc".
- "postLogoutRedirectUris". Вместо POST_LOGOUT_URL укажите FQDN сервера Indeed CM: "https://POST_LOGOUT_URL/cm/mc/signout-callback-oidc".
Заполните секцию "signingCertificateThumbprint", указав Отпечаток сертификата подписи (Thumbprint). В качестве сертификата подписи можно использовать SSL/TLS-сертификат, используемый для работы веб-сервера Indeed CM.
В ОС Linux для работы .Net Core необходимо предоставить файл .pfx без пароля, содержащий сертификат, Отпечаток (Thumbprint), которого указан в поле "signingCertificateThumbprint" и закрытый ключ.
Для создания такого файла потребуются сертификат и закрытый ключ, которые были созданы на этапе настройки веб-сервера NGINX или Apache, или создайте их заново с помощью следующих команд (необходимо подставить имя импортированного pfx файла вместо PFXFILE) :
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
Затем создайте директорию в домашнем каталоге пользователя, из под которого происходит настройка сервера Indeed CM, и создайте в этом каталоге файл .pfx без пароля с помощью утилиты openssl:
mkdir -p ~/.dotnet/corefx/cryptography/x509stores/my/ openssl pkcs12 -export -out ~/.dotnet/corefx/cryptography/x509stores/my/SSL.pfx -inkey SSL.key -in SSL.crt
Заполните секцию "authentication", указав метод аутентификации пользователей, который будет использовать сервер OIDC. В зависимости от расположения сервера системы и ОС, может быть указан следующий метод: Windows или WindowsCustom.
Для инсталляций системы под управлением ОС Windows доступны два метода: Windows или WindowsCustom.
Для инсталляций системы под управлением ОС Linux доступен только метод WindowsCustom.
Windows - используется, если сервер системы развернут на доменной рабочей станции под управлением ОС Windows. Для данного метода не требуется заполнение раздела "ldap".
WindowsCustom - используется, если сервер развернут вне домена или если требуется аутентификация пользователей в Web-приложения системы из каталога пользователей домена Active Directory, расположенного за пределами того домена в котором развернут сервер системы или с которым нет трастовых отношений. Для данного метода необходимо заполнить секцию "ldap".
- Заполните секцию "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-имя домена.
Чтобы узнать DNS-имя домена и NetBIOS-имя домена, выполните в командной строке:
set USERDNSDOMAIN - выводит DNS-имя домена
set USERDOMAIN - выводит NetBIOS-имя доменаПример заполненной секции, с подключением к серверу dc.demo.local по LDAP (389 порт):"ldap": { "directories": [ { "server": "dc.demo.local", "port": 389, "secureSocketLayer": false, "verifyServerCertificate": false, "authType": "Basic", "userName": "DEMO\\servicecm", "password": "Q1w2e3r4", "domainDnsName": "demo.local", "domainNetbiosName": "DEMO" } ] },
Сохраните внесенные изменения в файл конфигурации сервера OpenID Connect в файле appsettings.json.
{
"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://cm-core.demo.local/cm/mc/signin-oidc" ],
"postLogoutRedirectUris": [ "https://cm-core.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://cm-core.demo.local/cm/ss/signin-oidc" ],
"postLogoutRedirectUris": [ "https://cm-core.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": "*"
}
{
"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": "*"
}
- No labels