Аутентификация и авторизация в ASP.NET Web API

| Четверг, 14 марта, 2013

Метки: ASP.NET Web API Комментарии: 0

Приложение Web API создано, и нужно контролировать доступ к нему. В этой статье рассмотрим некоторые методы защиты приложения Web API от несанкционированного доступа. Рассмотрим основные возможности процедур аутентификации и авторизации в ASP.NET Web API.

  • Аутентификация – известна, как процедура проверки подлинности, - пользователь вводит имя и пароль, а сервер проверяет соответствие пароля, с тем паролем (или хешем пароля), что хранится в базе данных.
  • Авторизация – ограничение или предоставление прав пользователю на какое-то действие. Например, пользователь может получить доступ на чтение к некоторому ресурсу, но не может создавать новые объекты или сущности.

Аутентификация

В Web API аутентификация происходит на хосте. Для веб-хостинга - это IIS (Internet Information Services), где используется HTTP-модули для аутентификации. Можно настроить проект для использования любого модуля встроенного в IIS или ASP.NET, или написать модуль самостоятельно, выполняющий свою собственную аутентификацию.

Если хост подтверждает подлинность пользователя, то создается объект IPrincipal, который представляет контекст защиты в выполняемом коде. Этот объект прикрепляется к текущему потоку, путем записи в свойство Thread.CurrentPrincipal. Principal-объект имеет свойство Identity, в котором находится объект, хранящий информацию о пользователе. Если пользователь аутентифицирован, то свойство Identity.IsAuthentificated возвращает значение true, а для анонимных запросов false.

Обработчики HTTP-сообщений для аутентификации

Вместо аутентификации на хосте можно написать код проверки подлинности в обработчике HTTP-сообщений. В этом случае обработчик проверяет сообщение HTTP и инициализирует principal-объект.

Когда нужно использовать обработчики HTTP-сообщений для аутентификации? Приведем некоторые "за" и "против":

  • HTTP-модуль видит все запросы, приходящие в процесс ASP.NET. Обработчики HTTP-сообщений видят только запросы, направленные в Web API.
  • Обработчик HTTP-сообщений можно настроить на какой определенный маршрут (route).
  • Для HTTP-модулей ведется запись в журнал IIS, аудит и т.п.
  • HTTP-модули выполняются раньше. Если обработчик HTTP-сообщений выполняет аутентификацию, то объект principal не определен, пока не выполнит свои функции обработчик HTTP.

В общем, если вы не пишете самоуправляемую среду для хостинга, то лучше выбрать HTTP-модули.

Установка principal-объекта

Если приложение выполняет какую-то свою аутентификацию, то нужно прописать объект principal в двух местах.

  • Thread.CurrentPrincipal. Это стандартный способ в .NET установки principal-объекта для потока.
  • HtppContext.Current.User. Это свойство характерно для ASP.NET.

В следующем у коде показано, как задать объект principal:

private void SetPrincipal(IPrincipal principal)
{
    Thread.CurrentPrincipal = principal;
    if (HttpContext.Current != null)
    {
        HttpContext.Current.User = principal;
    }
}

Для веб-хостинга нужно установить principal в двух местах, иначе контекст защиты не будет целостным. Для самоуправляемого хостинга нужно проверить свойство HttpContext.Current на null.

Комментарии
Никто еще не оставил здесь комментарий.
Войдите, чтобы написать комментарий , или воспользуйтесь формой ниже.
 

Copyright © CodeHint.ru 2013-2019