Sisk

Базовая Аутентификация

Эта страница переведена с английского автоматически. Читать оригинал

Пакет Базовой Аутентификации добавляет обработчик запросов, способный обрабатывать базовую схему аутентификации в вашем приложении Sisk с минимальной конфигурацией и усилиями. Базовая аутентификация HTTP - это минимальная форма аутентификации запросов по идентификатору пользователя и паролю, где сессия контролируется исключительно клиентом, и нет токенов аутентификации или доступа.

Базовая Аутентификация

Подробнее о схеме базовой аутентификации можно прочитать в спецификации MDN.

Установка #

Чтобы начать, установите пакет Sisk.BasicAuth в вашем проекте:

> dotnet add package Sisk.BasicAuth

Вы можете ознакомиться с другими способами установки в вашем проекте в репозитории Nuget.

Создание обработчика аутентификации #

Вы можете контролировать схему аутентификации для всего модуля или для отдельных маршрутов. Для этого давайте сначала напишем наш первый базовый обработчик аутентификации.

В примере ниже устанавливается соединение с базой данных, проверяется, существует ли пользователь и действителен ли пароль, и после этого пользователь сохраняется в контексте.

C#
public class UserAuthHandler : BasicAuthenticateRequestHandler
{
    public UserAuthHandler() : base()
    {
        Realm = "Чтобы войти на эту страницу, пожалуйста, введите ваши учетные данные.";
    }

    public override HttpResponse? OnValidating(BasicAuthenticationCredentials credentials, HttpContext context)
    {
        DbContext db = new DbContext();

        // в данном случае мы используем электронную почту в качестве поля идентификатора пользователя, поэтому мы
        // ищем пользователя по его электронной почте.
        User? user = db.Users.FirstOrDefault(u => u.Email == credentials.UserId);
        if (user == null)
        {
            return base.CreateUnauthorizedResponse("Извините! Пользователь с таким электронным адресом не найден.");
        }

        // проверяет, что пароль учетных данных действителен для этого пользователя.
        if (!user.ValidatePassword(credentials.Password))
        {
            return base.CreateUnauthorizedResponse("Недействительные учетные данные.");
        }

        // добавляет вошедшего пользователя в контекст HTTP
        // и продолжает выполнение
        context.Bag.Add("loggedUser", user);
        return null;
    }
}

Итак, просто ассоциируйте этот обработчик запросов с нашим маршрутом или классом.

C#
public class UsersController
{
    [RouteGet("/")]
    [RequestHandler(typeof(UserAuthHandler))]
    public string Index(HttpRequest request)
    {
        User loggedUser = request.Bag.Get<User>();
        return $"Привет, {loggedUser.Name}!";
    }
}

Или используя класс RouterModule:

C#
public class UsersController : RouterModule
{
    public ClientModule()
    {
        // все маршруты внутри этого класса будут обрабатываться
        // UserAuthHandler.
        base.HasRequestHandler(new UserAuthHandler());
    }
    
    [RouteGet("/")]
    public string Index(HttpRequest request)
    {
        User loggedUser = request.Bag.Get<User>();
        return $"Привет, {loggedUser.Name}!";
    }
}

Примечания #

Основная ответственность базовой аутентификации лежит на клиентской стороне. Хранение, контроль кэша и шифрование обрабатываются локально на клиенте. Сервер только получает учетные данные и проверяет, разрешен ли доступ или нет.

Обратите внимание, что этот метод не является одним из самых безопасных, поскольку он возлагает значительную ответственность на клиента, которую может быть трудно отслеживать и поддерживать безопасность его учетных данных. Кроме того, важно передавать пароли в защищенном контексте соединения (SSL), поскольку они не имеют встроенного шифрования. Короткий перехват в заголовках запроса может раскрыть учетные данные доступа вашего пользователя.

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

Sisk распространяется с открытым исходным кодом по лицензии MIT.

Начните вводить, чтобы искать по документации и справочнику API.