Skip to content

Обязательная конфигурация аутентификации в appsettings.Production.json

Обязательное требование

Начиная с версии 24.2, в файле конфигурации appsettings.Production.json любого веб-приложения/сервиса должна присутствовать секция "Authentication".

В случае, если предполагается совместная работа сервисов, ключ "SecurityKey" должен быть для них одинаковым.

Структура конфигурации

В целях безопасности ключ в "SecurityKey" в примере был изменен. В случае, если необходимо использовать другую аутентификацию, обратитесь к описанию Настройки аутентификации.

appsettings.Production.json
json
  "Authentication": {
    "AuthenticationMethod": 1,
    ...
    "BuiltInJwtBearer": { 
      "SecurityKey": "bwdC&YiKXcPWt^lREtnckN!hiQ8Dw%H8", 
    }
  }
Значение "AuthenticationMethod"Описание
0Токен не генерируется и не используется, прямое подключение к БД.
1Прямое подключение к БД, генерируется токен с подписанием указанным ключом и алгоритмом и т.п. Это означает, что сервис может взаимодействовать с другим сервисом: выполнять и валидировать запросы.
2Строка соединения с БД содержит единый логин/пароль,
3Строка соединения с БД содержит единый логин/пароль, токен не генерируется а получается от внешнего провайдера (КС ID, Альфа ID, и т.п.).

Ошибка, при отсутсвии секции аутентификации и ключа "SecurityKey" в appsettings.Production.json Бюджет-NEXT 24.2 и выше:

Ошибка получения токена
System.InvalidOperationException: Не настроен ключ подписывания.
at Keysystems.Webservice.Lib.Identity.SingleUserJwtGenerator.GetTokenAsync(String userName, String password, String dataSourceType, String server, String database, String scope, CancellationToken cancellationToken) in C:\GitLab-Runner\builds\_mMsGmyqH\0\dsr\webdev\webnext\webnext.budget\platform\Keysystems.Webservice.Lib\Identity\SingleUserJwtGenerator.cs:line 131
at Keysystems.WebNext.Registrations.Models.DataBaseAuthManager.GetToken(PreLoginInfo preLoginInfo, CancellationToken cancellationToken) in C:\GitLab-Runner\builds\_mMsGmyqH\0\dsr\webdev\webnext\webnext.budget\Modules\core.web\Keysystems.WebNext.Registrations\Models\DataBaseAuthManager.cs:line 500

Что произойдёт, если секция отсутствует?

  • Сервис не сможет аутентифицировать запросы от других прикладных сервисов Кейсистемс;
  • Все межсервисные вызовы будут получать ответ 401 Unauthorized.

Ручная генерация ключа

Выполнить ручную генерацию ключа необходимо в случае обновления программного комплекса с версии 24.1 до 24.2.

При развертывании приложения ключ генерируется и прописывается в appsettings.Production.json автоматически.

1. На хосте выполните функцию для генерации ключа.

bash
cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 32; echo
Результат выполнения функции
bash
root@debian-11-test-dsr:~# cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 32; echo
bwdC&YiKXcPWt^lREtnckN!hiQ8Dw%H8

2. Откройте файл конфигурации appsettings.Production.json.

bash
mcedit /opt/wsks-6.0.9_443/www/html/wsks_54430/appsettings.Production.json

3. Добавить секцию Authentication с сгенерированным ключом.

appsettings.Production.json
json
  "Authentication": {
    "AuthenticationMethod": 1,
    ...
    "BuiltInJwtBearer": { 
      "SecurityKey": "bwdC&YiKXcPWt^lREtnckN!hiQ8Dw%H8", 
    }
  }

4. Сохраните изменения и перезапустите контейнер WEB-Сервер-КС.

bash
systemctl restart wsks-6.0.9_443

Альтернативно, можно перезапустить только само приложение с помощью команды:

bash
bash /opt/wsks-6.0.9_443/ctl/ws_ctlapp.sh -p "54430"  -m "restart"


Принципы работы аутентификации между сервисами с JWT (HS256)

Общая схема работы

Все сервисы системы используют единый секретный ключ для подписи и проверки JWT-токенов. Это означает:

  • Любой сервис может самостоятельно генерировать токены;
  • Любой другой сервис может проверять подлинность этих токенов;
  • Для проверки используется один и тот же секретный ключ (SecurityKey).

Процесс взаимодействия

1. Генерация токена (Сервис А)

  • Сервис создаёт JWT с нужным claims (данными поьзователя, правами и т.д);
  • Подписывает токен с помощью единого секретного ключа (алгоритм HS256);
  • Передает токен клиенту или другому сервису.

2. Генерация токена (Сервис B)

  • Получает JWT от сервиса;
  • Проверяет подпись токена, используя тот же секретный ключ;
  • Если подпись верна - токен считается подлинным.

© 2003—2025 ООО «Кейсистемс». Все права защищены.