Почистить комментарии от упоминаний процесса
Удалены <remarks>, <summary> сжаты до короткой фразы, вырезаны ссылки на Task/Ruling/этап/python/прототип; //-комментарии со ссылками на процесс удалены; то же в .proto. Правила обновлены в docs/spec/Код-стайл-Дейл.md. Строк комментариев 27210 -> ~19100.
This commit is contained in:
@@ -10,44 +10,26 @@ using Deal.Grpc.Hosting.Services;
|
||||
namespace Deal.Grpc.Hosting.Interceptors;
|
||||
|
||||
/// <summary>
|
||||
/// Серверный интерцептор service-token (Ruling 1; общий шаблон трёх Deal-сервисов — C31).
|
||||
///
|
||||
/// Каждый RPC Deal-сервиса обязан нести gRPC-metadata «service-token», равный ожидаемому значению
|
||||
/// из env DEAL_SERVICE_TOKEN (общий токен сервисов в compose, Ruling 12). Отсутствие или
|
||||
/// несовпадение токена — отказ UNAUTHENTICATED до вызова метода сервиса. Стандартный
|
||||
/// grpc.health.v1.Health токеном НЕ проверяется: это liveness инфраструктуры (docker healthcheck,
|
||||
/// Ruling 12), данных тенантов он не отдаёт.
|
||||
///
|
||||
/// Fail-closed (замечание ревью Task 2 учтено): если DEAL_SERVICE_TOKEN не задан/пуст — любой
|
||||
/// Deal-RPC отклоняется всегда. Явный гард обязателен: сравнение строк без него пропустило бы
|
||||
/// запрос с пустым значением metadata («» == «»), а env-провайдер конфигурации возвращает пустую
|
||||
/// строку вместо null для незаданного ключа.
|
||||
///
|
||||
/// Проверка выполняется для ВСЕХ видов RPC (unary/клиентский/серверный/дуплексный стриминг):
|
||||
/// метод <see cref="EnsureAuthorized"/> вызывается из каждого handler-а (замечание code-review).
|
||||
/// Серверный интерцептор service-token.
|
||||
/// </summary>
|
||||
public sealed class ServiceTokenInterceptor : Interceptor
|
||||
{
|
||||
/// <summary>
|
||||
/// Ключ gRPC-metadata с токеном сервиса (контракт — README src/contracts).
|
||||
/// Ключ gRPC-metadata с токеном сервиса
|
||||
/// </summary>
|
||||
public const string ServiceTokenMetadataKey = "service-token";
|
||||
|
||||
// Префикс методов стандартного gRPC-health, освобождённых от проверки токена.
|
||||
private const string HealthMethodPrefix = "/grpc.health.v1.Health/";
|
||||
|
||||
// Env-ключ ожидаемого токена (только env; ключи/секреты не логируются — Ruling 13).
|
||||
private const string ServiceTokenEnvKey = "DEAL_SERVICE_TOKEN";
|
||||
|
||||
// Деталь отказа — общий текст для трёх сервисов этапа (шаблон T2/T3/T4).
|
||||
private const string RejectionDetail = "service-token отсутствует или неверен";
|
||||
|
||||
private readonly byte[] _expectedTokenBytes;
|
||||
|
||||
/// <summary>
|
||||
/// Создаёт интерцептор. Ожидаемый токен читается из конфигурации (env DEAL_SERVICE_TOKEN)
|
||||
/// в момент старта хоста; смена токена требует рестарта (как остальной env-конфиг). Токен
|
||||
/// хранится в UTF-8-байтах для constant-time сравнения (<see cref="CryptographicOperations"/>).
|
||||
/// Создаёт интерцептор.
|
||||
/// </summary>
|
||||
/// <param name="configuration">Конфигурация хоста (env-провайдер WebApplicationBuilder).</param>
|
||||
public ServiceTokenInterceptor(IConfiguration configuration)
|
||||
|
||||
Reference in New Issue
Block a user