Обязательная конфигурация аутентификации в appsettings.Production.json
Обязательное требование
Начиная с версии 24.2, в файле конфигурации appsettings.Production.json любого веб-приложения/сервиса должна присутствовать секция "Authentication"
с единым (одинаковым) ключем "SecurityKey"
для всех сервисов Кейсистемс.
Структура конфигурации
В целях безопасности ключ в "SecurityKey"
был изменен. В случае, если необходимо использовать другую аутентификацию, обратитесь к описанию Настройки аутентификации.
"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.
Принципы работы аутентификации между сервисами с JWT (HS256)
Общая схема работы
Все сервисы системы используют единый секретный ключ для подписи и проверки JWT-токенов. Это означает:
- Любой сервис может самостоятельно генерировать токены;
- Любой другой сервис может проверять подлинность этих токенов;
- Для проверки используется один и тот же секретный ключ (SecurityKey).
Процесс взаимодействия
1. Генерация токена (Сервис А)
- Сервис создаёт JWT с нужным claims (данными поьзователя, правами и т.д);
- Подписывает токн с помощью единого секретного ключа (алгоритм HS256);
- Передает токен клиенту или другому сервису.
2. Генерация токена (Сервис B)
- Получает JWT от сервиса;
- Проверяет подпись токена, используя тот же секретный ключ;
- Если подпись верна - токен считается подлинным.