Page tree

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

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

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

Выберите инструкцию в зависимости от ОС, где установлен сервер Rutoken KeyBox.

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

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

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

В качестве сертификата подписи используйте сертификат и закрытый ключ, созданные для веб-сервера.

Чтобы подготовить сертификат подписи:

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

Настройка файла appsettings.json

Настройте конфигурацию сервера OIDC:

  1. Запустите Мастер настройки (версия 7.1).
  2. Перейдите в раздел Контроль доступаOpenID Connect.
  3. Укажите следующие настройки:
    • URL подключения к серверу OpenID Connect.
    • Полное доменное имя (FQDN) сервера Rutoken KeyBox. Для конфигурации с несколькими серверами укажите их полные доменные имена через запятую.
    • Отпечаток сертификата подписи.
  4. При необходимости сгенерируйте клиентские секреты.
  5. Примените настройки.

После завершения работы Мастера в директории C:\inetpub\wwwroot\keybox\oidc создается конфигурационный файл appsettings.json.

Аутентификация

В секции authentication файла appsettings.json указан метод аутентификации пользователей, который будет использовать сервер OIDC. Выберите один из методов: Windows или WindowsCustom. Мастер настройки выставляет значение Windows.

Выберите Windows, если сервер Rutoken KeyBox развернут на доменной рабочей станции под управлением ОС Windows.

Выберите WindowsCustom, если сервер Rutoken KeyBox развернут вне домена или пользователи домена, где находится каталог пользователей, находятся за пределами домена сервера Rutoken KeyBox, и с сервером нет трастовых отношений.

База данных

По умолчанию сервер OIDC использует локальную базу данных SQLite. База данных SQLite используется для инсталляций с одним сервером Rutoken KeyBox. Данные сервера OIDC хранятся в каталоге C:\inetpub\wwwroot\keybox\oidc\data.

Для инсталляций с несколькими серверами Rutoken KeyBox используйте базу данных Microsoft SQL или PostgreSQL. Измените секции defaultConnection и provider:

Изменения не нужны. Секции имеют следующие значения:

  • 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": "/keybox/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/keybox/mc/signin-oidc" ],
      "postLogoutRedirectUris": [ "https://server.demo.local/keybox/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/keybox/ss/signin-oidc" ],
      "postLogoutRedirectUris": [ "https://server.demo.local/keybox/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 является частью дистрибутива Rutoken KeyBox и устанавливается вместе с сервером системы. После установки сервера OIDC:

  1. Подготовьте сертификат подписи JWT-токенов.
  2. Настройте конфигурационный файл 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 не существует, вы можете его создать или сменить пользователя, от имени которого запускаются сервисы Rutoken KeyBox.
Чтобы сменить пользователя, выполните /etc/systemd/system/keybox-<имя сервиса>.service. Укажите имя пользователя в директиве User.

Чтобы подготовить сертификат подписи:

  1. Создайте поддиректорию домашнего каталога пользователя, от имени которого запускается сервер OIDC (www-data):

    sudo mkdir -p /var/www/.dotnet/corefx/cryptography/x509stores/my/
  2. Объедините файл сертификата и файл ключа в файл PFX. Поместите файл PFX в поддиректорию домашнего каталога пользователя.

    При выполнении команды утилита openssl предлагает установить пароль для файла PFX. Оставьте файл PFX без пароля: два раза нажмите Enter.

    sudo openssl pkcs12 -export -out /var/www/.dotnet/corefx/cryptography/x509stores/my/OIDC.pfx -inkey SSL.key -in SSL.crt
  3. Получите отпечаток сертификата подписи:

    sudo openssl x509 -fingerprint -in SSL.crt -noout | tr -d ':'
    Пример вывода отпечатка сертификата
    SHA1 Fingerprint=ADB613EC1A1692310D83C81F269C098A3DBD4EE0

Настройка файла appsettings.json

Настройте конфигурацию сервера OIDC:

  1. Запустите Мастер настройки.
  2. Перейдите в раздел Контроль доступа → OpenID Connect.
  3. Укажите следующие настройки:
    • URL подключения к серверу OpenID Connect.
    • Полное доменное имя (FQDN) сервера Rutoken KeyBox. Для конфигурации с несколькими серверами укажите их полные доменные имена через запятую.
    • Отпечаток сертификата подписи.
  4. При необходимости сгенерируйте клиентские секреты.
  5. Примените настройки.

После завершения работы Мастера в директории /opt/aktivco/keybox/oidc создается конфигурационный файл appsettings.json.

База данных

По умолчанию сервер OIDC использует локальную базу данных SQLite. База данных SQLite используется для инсталляций с одним сервером Rutoken KeyBox. В этом случае данные сервера OIDC будут храниться в каталоге /opt/aktivco/keybox/oidc/data.

Для инсталляций с несколькими серверами Rutoken KeyBox используйте базу данных Microsoft SQL или PostgreSQL. Для этого измените секции defaultConnection и provider:

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

  • 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": "/keybox/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/keybox/mc/signin-oidc" ],
        "postLogoutRedirectUris": [ "https://astra-174-srv/keybox/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/keybox/ss/signin-oidc" ],
        "postLogoutRedirectUris": [ "https://astra-174-srv/keybox/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\\servicekeybox",
        "password": "Q1w2e3r4",
        "domainDnsName": "demo.local",
        "domainNetbiosName": "DEMO"
      }
    ]
  },
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

В файле заполнены секции и параметры, необходимые для работы Rutoken KeyBox:

  • В параметре signingCertificateThumbprint указывается отпечаток сертификата подписи JWT-токенов.
  • В секции clients Мастер настройки заполняет параметры clientSecret (секреты - это пароли, разрешенные для предъявления приложениям системы), redirectUris и postLogoutRedirectUris для корректной маршрутизации между OIDC и соответствующими веб-приложениями Rutoken KeyBox.
  • В секции 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-имя домена.

Как узнать DNS-имя и NetBIOS-имя домена

Выполните в командной строке:

set USERDNSDOMAIN, чтобы узнать DNS-имя домена.
set USERDOMAIN, чтобы узнать NetBIOS-имя домена.

  • No labels