Endpoint: LoginByPassword

API-контракт Версия: 0.1 draft

Вход по логину и паролю: при успехе выписывается JWT для заголовка Authorization. Единственная ручка без токена. Поведение — LoginByPasswordHandler.

⟨/⟩ Исходник

1. Транспорт

POST /api/Auth/LoginByPassword, JSON-тело (LoginByPasswordCommand ниже). Помечен [AllowAnonymous] — единственный вход без токена (fallback-политика закрывает всё остальное).

При успехе Payload.Token — JWT; фронт кладёт его в localStorage и шлёт в Authorization: Bearer. При неверных кредитах — 401 (ошибка в единой обёртке).

2. Endpoint

/// <summary>Endpoint входа по паролю.</summary>
public class LoginByPasswordEndpoint
{
    public LoginByPasswordCommand? Input { get; set; }
    public LoginByPasswordResult? Output { get; set; }
}

3. Command

/// <summary>Кредиты входа.</summary>
public class LoginByPasswordCommand : BasedCommand
{
    /// <summary>Логин.</summary>
    public string Login { get; init; } = "";

    /// <summary>Пароль (на этапе разработки сверяется как открытый текст).</summary>
    public string Password { get; init; } = "";
}

4. Result

/// <summary>Результат входа: токен в поле Payload; при ошибке Payload = null.</summary>
public class LoginByPasswordResult : BasedResult
{
    public LoggedInPayload? Payload { get; init; }
}

5. Payload

/// <summary>Выданный токен сессии.</summary>
public class LoggedInPayload
{
    /// <summary>JWT access-token (несёт jti, IcdUserId, IcdUserLogin).</summary>
    public string Token { get; init; } = "";
}