Skip to main content

Сервер OpenID Connect

Сервер OpenID Connect предназначен для аутентификации пользователей в веб-приложениях Indeed CM по протоколу OpenID Connect.

Является обязательным для инсталляций системы под управлением ОС Linux и дополнительным для инсталляций под управлением ОС Windows.

info

OpenID Connect (OIDC) - это протокол аутентификации и авторизации, разработанный на основе OAuth 2.0, который добавляет слой идентификации к протоколу OAuth. Он позволяет приложениям проверять идентичность пользователя и получать информацию о нем от провайдера идентификации (Identity Provider, IdP).

Установите сервер OIDC из дополнительного пакета IndeedCM.Oidc.Server-<номер версии>.x64.ru-ru.msi. После установки выполните следующие действия:

  1. Загрузите сертификат подписи JWT-токенов.
  2. Настройте конфигурационный файл appsettings.json.

Сертификат подписи JWT-токенов

  1. Поместите сертификат подписи JWT-токенов в хранилище Локальный компьютер - Личное. В качестве сертификата подписи можно использовать SSL/TLS-сертификат, например, используемый для работы веб-сервера Indeed CM.
  2. Предоставьте IIS полный доступ к закрытому ключу сертификата подписи:
    1. Перейдите в оснастку Сертификаты (Certificates) компьютера, на котором установлен сервер OIDC.
    2. Кликните правой кнопкой мыши на сертификате, выберите Все задачи (All tasks) → Управление закрытыми ключами... (Manage Private Keys...).
    3. Нажмите Добавить (Add), укажите сервер в меню Размещение (Location), укажите локальную группу IIS_IUSRS в поле Введите имена выбранных объектов (Enter the object names to select), нажмите Проверить имена (Check Names) и ОК.
    4. Выставите права Полный доступ (Full Control) и Чтение (Read).
    5. Нажмите Применить (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 и Windows Custom

Метод 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:

Внесение изменений не требуется. Секции имеют следующие значения:

  • defaultConnection: "Filename=./data/oidc-server.sqlite3"
  • provider: "sqlite"

Перезагрузите сервер 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": "*"
}