Что такое код asp aspallowsessionstate

Содержание

Просмотрите мой код аутентификации ASP.NET

У меня возникли проблемы с аутентификацией в ASP.NET. Я не использую большую часть встроенной аутентификации в .NET.

Я получил некоторые жалобы от пользователей, использующих Internet Explorer (любая версия — может повлиять и на другие браузеры), что процесс входа в систему продолжается, но при перенаправлении они не аутентифицированы и возвращаются на страницу входа в систему (страницы, требующие проверки подлинности при регистрации и если не перенаправить обратно на страницу входа в систему). Это может быть проблема с печеньем?

Нужно ли проверять, разрешены ли файлы cookie пользователем?

Какой лучший способ создать аутентификацию, если у вас есть пользовательская таблица-член и не хотите использовать элементы управления входами ASP.NET?

Вот мой текущий код:

Попробуйте использовать встроенную функцию asp.net Аутентификация форм (членство).

Вы можете узнать из этих видеороликов:

Если вы хотите настроить его, смотрите это видео:

Классический случай сверхструктурированного механизма аутентификации, и, кроме того, дизайн плохой.

Исключения должны быть вне класса Auth, но находиться в одном и том же пространстве имен. Представьте себе, как будет выглядеть инфраструктура .Net, если бы Microsoft создала исключения вроде этого. Всегда держите его простым и глупым (KISS). Кажется, вам нужен модульный код. Попробуйте быть простой, но модульной.

Ключи Client Client — это статические магические значения, и вы отправляете их с помощью своих сборок. Используйте SecureString вместо строки readonly. Любой может схватить его, используя Reflector. Как вы поддерживаете безопасность рекламы в объявлениях?

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

RequireClientOfType — int [] — почему в мире вы хотите это сделать? Я полагаю, что это могло быть переименование или неизменяемая структура, если это вообще было необходимо.

Вы уже используете FormsAuthentication в своем Login() и Logout(), который достаточно для замены всего вашего Auth. Почему вы хотите заново изобрести колесо, если в конечном итоге вы собираетесь использовать FormsAuthnetication, чтобы позаботиться об Auth.

И да, если вы не можете пересмотреть этот дизайн, используйте FxCop/StyleCop, по крайней мере, чтобы избежать спагетти-кода.

Также вы можете сделать класс Auth как static и выставить такие функции, как FormsAuthentication. А также переименуйте его с Auth на Аутентификация.

16. Безопасность приложений ASP.NET 2.0

Защита приложений ASP.NET 2.0, аутентификация и управление разрешениями, аутентификация Windows и аутентификация средствами Web-форм

Вначале — о некоторых концепциях системы безопасности ASP.NET.

Аутентификация — проце cc получения имени пользователя и пароля и проверка полученной информации (через AD, базу данных и т.п.). Если проверка прошла успешно, то пользователь относится к категории аутентифицировавшихся пользователей.

Авторизация — процесс определения того, какие права предоставлены пользователю на указанный ресурс. В итоге пользователю предоставляется доступ к указанному ресурсу или такой доступ запрещается.

В ASP.NET поддерживается три метода аутентификации:

· аутент и ф и кация средствами Web-форм;

· аутентификация средствами Microsoft Passport.

При использовании аутентификации Windows при обращении пользователя к Web-странице Web-сервер запрашивает у него имя пользователя (с доменом) и парольный хэш. Полученная информация проверяется средствами Windows (на локальном компьютере или через контроллер домена).

При использовании аутентификации средствами Web-форм пользователю предоставляется форма, на которой он должен ввести свое имя и пароль. Полученная информация проверяется не средствами Windows, а средствами Web-приложения. Если все нормально, на компьютер пользователя передается специальная aut h enti fication cookie , которая в дальнейшем и удостоверяет права пользователя на доступ к страницам этого Web-приложения.

Работать через Microsoft Passport могут только доверенные партнеры Microsoft. при использовании этого метода аутентификацией занимается Web-служба Microsoft Passport.

В каких ситуациях каждый режим аутентификации используется:

· Windows — как правило, только для Интранет-приложений, поскольку каждому пользователю нужно создавать учетную запись Windows.

· Web -формы — для большинства приложений, которые предназначены для доступа через Интернет;

· Microsoft Passport — требует платы и соглашения с Microsoft , поэтому большого смысла в использовании нет. Удобно, поскольку пользователь может использовать одно имя пользователя и один пароль для доступа ко многим Web-сайтам — меньше риск забыть.

При использовании аутентификации Windows вам потребуется настроить аутентификацию на уровне IIS. В IIS предусмотрено четыре режима аутентификации:

· Anonymous — пользователю не требуется предоставлять имя пользователя и пароль. Реально этот пользователь будет обладать на Web-сервере правами специальной учетной записи IUSR_имя_компьютера (можно поменять на другую учетную запись из консоли Internet S ervices Manager );

· Basic — имя пользователя и пароль учетной записи Windows будут передаваться на сервер практически открытым текстом. (base64 — e ncoded ). Поддерживаются все броузеры, но такой режим небезопасен (лучше использовать только вместе с SSL).

· Digest — вместо пароля передается хэш в формате MD5. Метод защищенный и основанный на открытых стандартах, однако работает только с доменными учетными записями и только с теми. для которых установлено хранение пароля в режиме reversible en c ryption, поэтому малоприменимо. Работает с только с Internet Explorer версии 5.0 или более поздних.

· Integrated Windows — передается хэш Windows. Работает только с Internet Explorer. Наиболее часто используется для Интранет-приложений.

Возможность зашифровать весь обмен информацией между клиентом и Web-сервером — применение SSL.

В ASP.NET предусмотрена возможность проверить, установлено защищенное соединение или нет. Для этой цели используется проверка значения свойства Request. IsSecureConnection .

Теперь — о применении аутентификации Windows в Web-приложениях.

Защита Web-приложения ASP.NET средствами аутентификации Windows состоит из нескольких этапов:

1) установить необходимые параметры в IIS (как — мы уже рассматривали);

2) настроить аутентификацию в Web.config;

3) настроить авторизацию в web.config.

Второй пункт реализуется так: нужно открыть нужный файл web.config и вписать в раздел system.web следующую строку:

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

Если в атрибуте path будет указан каталог, то настройки распространятся на все файлы в этом каталоге и подкаталогах. Если будет указан конкретный файл (Web-форма), то настройки будут распространены только на эту Web-форму.

deny users =»?» /> означает, что запрещен доступ всем анонимным пользователям.

Чтобы разрешить доступ пользователю Mary, код может быть таким:

Если включить этот код в файл web.config для всего приложения, то параметры будут применены для всего Web-приложения.

В ASP.NET можно использовать имперсонацию. При применении имперсонации обращение к ресурсам идет с правами той учетной записи, которая прошла аутентификацию. По умолчанию имперсонация отключена, и обращение к ресурсам происходит от имени учетной записи ASPNET. Чтобы имперсонацию включить, можно использовать код вида

После настройки аутентификации Windows в Web-приложении при обращении к защищенной Web-странице пользователю откроется стандартное окно аутентификации, в котором пользователю необходимо ввести имя и пароль.

В коде Web-приложения вы можете получать информацию об аутентификации пользователя при помощи объекта User . Identity , например:

lblAuthUser . Text = User . Identity . Name

lblAuthType . Text = User . Identity . AuthenticationType

lblIsAuth . Text = User . Identity . IsAuthenticated

Теперь — про Forms — based аутентификацию.

При использовании этой аутентификации запрос пользователя все равно должен пройти через IIS (и, таким образом, отработать аутентификация Windows). Поэтому на уровне аутентификации Windows должен быть открыт доступ для анонимных пользователей. Далее работа выглядит так:

1) пользователь запрашивает доступ к защищенной Web-странице

2) сервер проверяет, включен ли в этот запрос authentification cookie. Если да, то происходит авторизация. При этом сравнивается имя пользователя, которое включено в куки, с параметрами авторизации в we b .config и на основании этого принимается решение — пускать пользователя или нет.

3) если authentification cookie не встроен в запрос, ASP . NET перенаправляет пользователя на logon page (путь к нему определяется в файле конфигурации приложения). на этой странице пользователь должен ввести имя и пароль.

4) код приложения на logon page проверяет введенное пользователем имя и пароль, и, если оно правильно, прицепляет к его сеансу authentification cookie, и далее все идет согласно п.2. Если нет — выдается сообщение типа Access Denied.

Как все это реализовать на практике:

Вначале обеспечиваем для Web-приложения анонимную аутентификацию средствами Windows (такой режим работает по умолчанию)

Затем прописываем в файл web.config для приложения следующий код:

Далее мы настраиваем код обработчика событий для единственной кнопки на этой форме:

Private Sub cmdLogin_Click( _

ByVal sender As System.Object, _

ByVal e As System.EventArgs) _

Dim strCustomerId As String

’Validate User Credentials

If (strCustomerId <> «») Then

lblInfo.Text = «Invalid Credentials: Please try again»

Всю проверку выполняет у нас внешняя функция login, которая, если все прошло нормально, возвращает имя пользователя (непустое значение).

Необходимо помнить, что при использовании Forms-based аутентификации информация об имени пользователя и пароле передается открытым текстом. Поэтому рекомендуется сочетать такую аутентификацию с защитой средствами SSL.

Последняя часть нашего курса — использование аутентификации средствами Microsoft Passport. Наиболее удобная возможность при использовании Microsoft Passport — то, что пользователь может помнить только одно имя пользователя/пароль для доступа на множество Web-сайтов.

При использовании аутентификации средствами Microsoft Passport ASP . NET проверяет наличие специального куки. Если его нет, пользователь перенаправляется на сайт passport . com за аутентификацией.

Посоветуйте как сделать работоспособную аутентификацию и авторизацию?

Прочитал недавно книгу ASP.NET MVC 4 с примерами на C# 5.0 для профессионалов (в оригинале называется Pro ASP.NET MVC 4). Там тема аутентификации и авторизации, можно сказать, не рассматривается. Там показан пример создания фильтра авторизации (с пометкой о том, что в реальной жизни никогда такого не делайте ) и пример использования встроенного фильтра авторизации. Но там нету примеров или описания, как работать с аутентификацией. Кроме того, стандартный фильтр авторизации не совсем подходит, т.к. не хочется прописывать жестко имена пользователей и роли для контроллеров.

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

Статья 1: https://www.c-sharpcorner.com/articl. h-asp-net-mvc/
Как я понял, для аутентификации чувак определяет ряд своих классов, наследуя их от классов . Provider. Для авторизации он создает свой CustomAuthorizeAttribute.
Вопросы, непонятки:
1.1. Кажется, что как-то очень много кода надо писать. Плюс не нравится куча методов с throw new NotImplementedException(); . Или ничего страшного в этом всем нету и кода тоже нормально?
1.2. Зачем он создает свой CustomAuthorizeAttribute, а не использует стандартный? Только для того, что бы перенаправить пользователя на соответствующие странички (если пользователь не авторизован или авторизован, но у него нету доступа)?

Статья 2: https://oxozle.com/2013/08/10/avtorizaciya-asp-net-mvc
Кода там меньше и как-то оно понятнее. Есть класс FormsAuthenticationService, который присутствует в каждом контроллере и мы явно к нему обращаемся для проверки каких-то вещей. Как я понял, то, что описано в этой статье, даже дает возможность в макетах писать конструкции IsAuthenticated() и IsInRole(), что, на мой взгляд, удобно.
Вопросы, непонятки:
2.1 Зачем там класс RolesHelper? Что он делает я понимаю, но как где он должен использоваться — непонятно.
2.2. Класс AuthenticateAttribute использовать нужно, как и стандартный атрибут авторизации, просто передавать туда роль не в виде строки, а в виде конкретного перечисления?

Резюме: подход в статье 2 мне более понятен и больше нравится. Но она написана 10.08.2013, т.е. почти 5 лет назад. Подход в статье 1, на первый взгляд, кажется сложнее и менее понятнее, но сама статья довольно свежая 30.12.2020.

Посоветуйте, какой подход лучше использовать? Возможно, то, что описано в статье 2 сегодня не актуально по каким-то причинам? Или же у подхода в статье 1 есть какие-то преимущества, которые не видны неопытным глазом?

Фильтры защиты в ASP.NET Web API

Продукты и технологии:

ASP.NET Web API, IIS, OWIN

В статье рассматриваются:

  • варианты реализации аутентификации и авторизации;
  • настройка фильтров аутентификации и авторизации на совместную работу;
  • создание фильтра аутентификации;
  • использование фильтра авторизации;
  • переопределение фильтров.
Илон Маск рекомендует:  CURL примеры 8 изумительных примеров cURL в PHP

Аутентификация и авторизация — краеугольные камни безопасности приложения. При аутентификации устанавливается идентификация пользователя проверкой предоставленных удостоверений, а при авторизации определяется, разрешено ли пользователю выполнять запрошенную операцию. Защищенная Web API аутентифицирует запросы и авторизует доступ к запрошенному ресурсу на основе установленной идентификации.

Реализовать аутентификацию в ASP.NET Web API можно с помощью точек расширения, доступных в конвейере ASP.NET Web API, а также с помощью некоторых средств, предоставляемых хостом. В первой версии ASP.NET Web API распространенной практикой было использование фильтра авторизации или фильтра операции для реализации аутентификации. В ASP.NET Web API 2 введен новый фильтр аутентификации, выделяемый процессу. Эта новая точка расширения обеспечивает четкое разделение обязанностей по аутентификации и авторизации. В этой статье я ознакомлю вас с этими двумя фильтрами защиты и покажу их применение для реализации аутентификации и авторизации как раздельных обязанностей в ASP.NET Web API.

Варианты для реализации аспектов защиты

Аутентификацию и авторизацию в ASP.NET Web API можно реализовать, используя точки расширения, предоставляемые хостом, а также точки расширения, доступные в самом конвейере ASP.NET Web API. Варианты на основе хоста включают HTTP-модули и промежуточные компоненты OWIN, тогда как варианты расширения ASP.NET Web API основаны на обработчиках сообщений, фильтрах операций, фильтрах авторизации и фильтрах аутентификации.

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

HTTP-модуль Это вариант для Web API, выполняемой в IIS. HTTP-модули позволяют выполнять код защиты на ранних стадиях как часть конвейера IIS. Участник системы безопасности (principal), установленный из HTTP-модуля, доступен всем компонентам, в том числе компонентам IIS, выполняемым в конвейере позднее. Например, когда участник системы безопасности устанавливается HTTP-модулем в ответ на событие AuthenticateRequest, имя пользователя этого участника корректно регистрируется в поле cs-username в журналах IIS. Самый крупный недостаток с HTTP-модулями — отсутствие гранулярности. HTTP-модули выполняются для всех запросов, поступающих приложению. Для веб-приложения с различными возможностями, такими как генерация HTML-разметки, Web API и т. д., наличие HTTP-модуля, принудительно вызывающего аутентификацию одним способом, в целом не является достаточно гибким подходом. Другой недостаток при использовании HTTP-модуля — зависимость от хоста (в данном случае от IIS).

Промежуточные компоненты OWIN Это еще один вариант на основе хоста, доступный в случае OWIN-хостов. ASP.NET Web API 2 полностью поддерживает OWIN. Возможно, самая веская причина для использования промежуточного OWIN в целях защиты состоит в том, что те же самые промежуточные компоненты могут работать в разных инфраструктурах. То есть вы можете задействовать в своем приложении несколько инфраструктур, таких как ASP.NET Web API, SignalR и т. д., но применять общий промежуточный уровень безопасности. Однако минимальная гранулярность промежуточного уровня OWIN может оказаться недостаточной, так как он выполняется в конвейере OWIN и обычно вызывается для всех запросов. Кроме того, промежуточные компоненты OWIN применимы только с OWIN-совместимыми хостами, хотя эта зависимость сравнительно лучше, чем зависимость от специфического хоста/сервера вроде IIS, как в случае с HTTP-модулями. Здесь стоит обратить внимание на то, что промежуточные компоненты OWIN могут выполняться в конвейере ASP.NET (интегрированном с IIS) благодаря пакету Microsoft.Owin.Host.SystemWeb.

Обработчик сообщений Вариант расширения, предоставляемый ASP.NET Web API. Самое крупное преимущество использования обработчика сообщений для защиты в том, что это концепция инфраструктуры ASP.NET Web API и, следовательно, она не зависит от нижележащего хоста или сервера. Кроме того, обработчик сообщений выполняется только при запросах Web API. Недостаток применения обработчика сообщений — отсутствие более тонкого контроля. Обработчик можно сконфигурировать как глобальный для всех запросов или для конкретного маршрута. Для данного маршрута у вас может быть несколько контроллеров. Все эти контроллеры и содержащиеся в них методы операций должны использовать одну и ту же аутентификацию, вводимую обработчиком сообщений, который сконфигурирован для этого маршрута. Иначе говоря, минимальная гранулярность для аутентификации, реализуемой обработчиком сообщений, — это уровень маршрута.

Фильтр операции Другой вариант расширения, предлагаемый ASP.NET Web API, — фильтр операции. Однако, с точки зрения реализации аутентификации, это негодный вариант просто потому, что эти фильтры выполняются после фильтров авторизации в конвейере ASP.NET Web API. Чтобы аутентификация и авторизация работали корректно, аутентификация должна предшествовать авторизации.

Фильтр авторизации Еще один вариант расширения, предлагаемый ASP.NET Web API. Один из самых распространенных способов реализации собственной аутентификации в сценариях, требующих большей гранулярности, чем та, которая обеспечивается обработчиками сообщений. Основная проблема при использовании фильтра авторизации как для аутентификации, так и для авторизации состоит в том, что порядок выполнения фильтров авторизации не гарантируется ASP.NET Web API. Главным образом это означает, что ваш фильтр авторизации, выполняющий авторизацию, может запросто быть запущен до вашего фильтра авторизации, выполняющего аутентификацию, т. е. фильтр авторизации равно не годится для аутентификации, как и фильтр операции.

Фильтр аутентификации Это самый новый вариант расширения, доступный в ASP.NET Web API 2, и он находится в центре внимания данной статьи. Фильтры аутентификации выполняются после обработчиков сообщений, но до выполнения любых других типов фильтров. Поэтому они являются лучшим выбором для реализации обязанностей по аутентификации. Еще важнее, что фильтры аутентификации выполняются до фильтров авторизации. Используя фильтр, ориентированный либо на аутентификацию, либо на авторизацию, вы можете разделить обязанности по аутентификации и авторизации.

Более того, фильтры аутентификации обеспечивают такой уровень контроля и гранулярности, который делает их особенно полезными. Возьмем случай с Web API, спроектированной для использования как «родными» мобильными приложениями, так и AJAX-приложениями, работающими в браузере. Мобильное приложение может предоставить маркер в HTTP-заголовке Authorization, а AJAX-приложение — использовать cookie аутентификации как удостоверения.

Допустим, что некое подмножество API доступно только для «родных» мобильных приложений и что вы хотите быть уверенными в возможности доступа к методам операций только при предоставлении маркера, а не cookie (cookie уязвимы при атаке с подделкой межсайтового запроса [cross-site request forgery, XSRF], тогда как маркер в HTTP-заголовке Authorization — нет). В этом случае аутентификация должна происходить на более тонком уровне гранулярности, чем это возможно в варианте на основе хоста или даже обработчика сообщений. Фильтр аутентификации подходит для этого случая просто идеально. Вы можете применять фильтр аутентификации на основе маркера ко всем этим контроллерам или методам операций, где они должны использоваться, а фильтр аутентификации на основе cookie — в других местах. Предположим, что в этом сценарии у вас есть несколько общих методов операций и вы хотите сделать их доступными либо через маркер, либо через cookie. Вы можете просто применять фильтры аутентификации на основе как cookie, так и маркера к этим общим методам операций, и один из фильтров сможет успешно выполнить аутентификацию. Такой вид контроля — самое крупное преимущество фильтров аутентификации. Когда нужен гранулярный контроль над аутентификацией, правильный подход — реализовать обязанности по аутентификации через фильтр аутентификации, а обязанности по авторизации — через фильтр авторизации.

Стоит упомянуть здесь, что готовый фильтр аутентификации, HostAuthenticationFilter, обеспечивает аутентификацию ASP.NET Web API через промежуточные компоненты OWIN. Хотя промежуточное ПО OWIN-аутентификации выполняется в конвейере и пытается «активно» аутентифицировать входящие запросы, его также можно сконфигурировать на «пассивную» аутентификацию запросов — только по требованию. HostAuthenticationFilter позволяет запускать пассивное ПО OWIN-аутентификации по имени на более поздних стадиях конвейера Web API. Этот подход позволяет сделать код аутентификации общим для разных инфраструктур (в том числе для промежуточных компонентов OWIN-аутентификации, предоставляемых Microsoft) и в то же время поддерживает гранулярность аутентификации индивидуально для каждой операции.

Хотя аутентификацию уровня хоста можно смешивать с более гранулярной аутентификацией на основе конвейера Web API, будьте осторожны и продумайте, как аутентификация уровня хоста может повлиять на аутентификацию Web API. Например, вы могли бы разместить промежуточное ПО аутентификации на основе cookie на уровне хоста в расчете на использование с другими инфраструктурами, скажем, ASP.NET MVC, но, разрешив Web API работать с участником системы безопасности на основе cookie, вы сделаете Web API уязвимой к таким атакам, как XSRF. Чтобы помочь в таких ситуациях, метод расширения SuppressDefaultHostAuthentication позволяет Web API игнорировать любую аутентификацию, сконфигурированную на уровне хоста. Шаблон Web API по умолчанию в Visual Studio использует cookie, разрешенные на уровне хоста, и маркеры на уровне Web API. Поскольку cookie разрешены на уровне хоста и требуют предотвращения XSRF, шаблон также использует SuppressDefaultHostAuthentication, чтобы не дать конвейеру Web API работать с участником системы безопасности на основе cookie. Тем самым Web API будет использовать только участника системы безопасности на основе маркера, и вам не понадобится создавать механизмы для Web API, защищающие ее от атак XSRF.

Как заставить фильтры аутентификации и авторизации работать в тандеме

В конвейере ASP.NET Web API фильтры аутентификации выполняются первыми (только потом выполняются фильтры авторизации) по той простой причине, что авторизация зависит от установленной идентификации, которая является результатом аутентификации. Вот как можно спроектировать совместную работу фильтров аутентификации и авторизации для защиты ASP.NET Web API.

Базовый принцип этой архитектуры — на фильтр аутентификации возлагается одна и только одна обязанность проверки удостоверений, и его избавляют от любых других обязанностей. Например, фильтр аутентификации не отклонит запрос с кодом состояния 401 Unauthorized, если удостоверения не предоставлены. Он просто не определяет аутентифицированную идентификацию и откладывает вопрос о том, как обрабатывать анонимные запросы, до стадии авторизации. Фильтр аутентификации в основном осуществляет три типа операций.

  1. Если нужные удостоверения отсутствуют в запросе, фильтр ничего не делает.
  2. Если удостоверения присутствуют и распознаются как правильные, фильтр устанавливает идентификацию в форме аутентифицированного участника системы безопасности.
  3. Если удостоверения присутствуют и распознаются как неправильные, фильтр уведомляет инфраструктуру ASP.NET Web API, указывая в результате ошибку, что, по сути, приводит к возврату запрашивающему ответа «не авторизован».

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

На самом фундаментальном уровне фильтр авторизации просто проверяет, является установленная идентификация аутентифицированной. Однако фильтр авторизации может также гарантировать, что:

  • имя пользователя аутентифицированной идентификации присутствует в списке разрешенных пользователей;
  • минимум одна из ролей, сопоставленных с аутентифицированной идентификацией, есть в списке разрешенных ролей.

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

Если все фильтры авторизации «счастливы», конвейер продолжает работу, и в конечном счете метод операции API-контроллера генерирует ответ на запрос. Если идентификация не установлена или если есть несовпадение по требованиям к имени пользователя или роли, фильтр авторизации отклоняет запрос с ответом 401 Unauthorized. Рис. 1 иллюстрирует роль, выполняемую двумя фильтрами в трех сценариях: удостоверения отсутствуют, присутствуют неправильные удостоверения и имеются правильные удостоверения.

Рис. 1. Фильтры защиты в конвейере ASP.NET Web API

Credentials Absent Удостоверений нет
Request with No Credential Запрос без удостоверений
No Action Taken Никаких действий не предпринимается
Rejects the Request for the Lack of Authenticated Principal Запрос отклоняется из-за отсутствия аутентифицированного участника системы безопасности
Unauthorized Response with Challenge Ответ без авторизации с запросом
Authentication Filter Фильтр аутентификации
Authorization Filter Фильтр авторизации
Action Method Метод операции
Adds Challenge Добавляет запрос
Does Not Execute Не выполняется
Invalid Credentials Present Присутствуют неправильные удостоверения
Request with Invalid Credential Запрос с неправильным удостоверением
context.ErrorResult Is Set to UnauthorizedResult context.ErrorResult присваивается UnauthorizedResult
Valid Credentials Present Присутствуют правильные удостоверения
Request with Valid Credential Запрос с правильным удостоверением
context.Principal Is Set to an Authenticated Principal context.Principal присваивается аутентифицированный участник системы безопасности
Successfully Authorizes, Because Identity Is Authentic Успешно авторизуется, так как идентификация аутентична
Response Message Сообщение-ответ
No Action Taken Никаких действий не предпринимается
Action Method Runs and Produces a Response Метод операции выполняется и генерирует ответ

Создание фильтра аутентификации

Фильтр аутентификации — это класс, реализующий интерфейс IAuthenticationFilter. В этом интерфейсе два метода: AuthenticateAsync и ChallengeAsync:

Илон Маск рекомендует:  Использование dllentrypoint

Метод AuthenticateAsync принимает HttpAuthenticationContext в качестве аргумента. Этот контекст определяет, как метод AuthenticateAsync передает результат процесса аутентификации обратно инфраструктуре ASP.NET Web API. Если сообщение-запрос содержит аутентичные удостоверения, свойству Principal переданного объекта HttpAuthenticationContext присваивается аутентифицированный участник системы безопасности. Если удостоверения неправильны, свойству ErrorResult объекта HttpAuthenticationContext присваивается UnauthorizedResult. Если в сообщении-запросе вообще нет удостоверений, метод AuthenticateAsync не предпринимает никаких действий. Код на рис. 2 демонстрирует типичную реализацию метода AuthenticateAsync, охватывающую эти три сценария. Аутентифицированным участником системы безопасности в этом примере является ClaimsPrincipal только с двумя заявками: Name и Role.

Рис. 2. Метод AuthenticateAsync

Метод AuthenticateAsync используется для реализации основной логики аутентификации, проверяющей удостоверения в запросе, а метод ChallengeAsync — для добавления запроса аутентификации (authentication challenge). Запрос аутентификации добавляется в ответ, когда код состояния — 401 Unauthorized, и, чтобы проанализировать код состояния, вам нужен объект ответа. Но метод ChallengeAsync не позволяет анализировать ответ или устанавливать запрос (challenge) напрямую. По сути, этот метод выполняется до метода операции в ходе обработки запроса (request) в конвейере Web API. Однако параметр HttpAuthenticationChallengeContext метода ChallengeAsync дает возможность присвоить объект результата операции (IHttpActionResult) свойству Result. Метод ExecuteAsync объекта результата операции ожидает генерации ответа задачей, анализирует код состояния ответа и добавляет заголовок ответа WWWAuthenticate. Код на рис. 3 демонстрирует типичную реализацию метода ChallengeAsync. В этом примере я просто добавляю «зашитый» в код запрос аутентификации. ResultWithChallenge — это класс результата операции, созданный мной для добавления такого запроса.

Рис. 3. Метод ChallengeAsync

Следующий код показывает класс фильтра:

В дополнение к реализации интерфейса IAuthenticationFilter я наследую от Attribute, чтобы этот класс можно было применять как атрибут к уровню класса (контроллера) или метода (метода операции).

Таким образом, вы можете создать фильтр аутентификации с одной обязанностью — проверять подлинность конкретного удостоверения (в этом примере — фиктивного маркера). У фильтра аутентификации нет логики авторизации; его единственная цель — обработка аутентификации: установление идентификации, если таковая есть (при обработке сообщения запроса) и возврат запроса аутентификации, если таковой есть (в ходе обработки сообщения ответа). Фильтры авторизации обрабатывают обязанности по авторизации, например проверяют, является ли данная идентификация аутентифицированной и входит ли она в список разрешенных пользователей или ролей.

Применение фильтра авторизации

Фундаментальная цель использования фильтра авторизации — выполнение авторизации, при которой определяется, может ли пользователь получить доступ к запрошенному ресурсу. Web API предоставляет реализацию фильтра авторизации с именем AuthorizeAttribute. Применение этого фильтра гарантирует, что идентификация является аутентифицированной. Кроме того, вы можете настроить атрибут авторизации списком имен конкретных пользователей и ролей, которым разрешен доступ. Код на рис. 4 демонстрирует фильтр авторизации, применяемый на разных уровнях (глобально, на уровне контроллера и на уровне метода операции), и использует разные атрибуты идентификации для ее авторизации. В этом примере глобальный фильтр гарантирует, что идентификация аутентифицирована. Фильтр, применяемый на уровне контроллера, гарантирует, что идентификация аутентифицирована и что минимум одна роль, сопоставленная с этой идентификацией, является «admin». Фильтр, используемый на уровне метода операции, гарантирует, что что идентификация аутентифицирована и что имя пользователя — «badri». Здесь следует обратить внимание на то, что фильтр авторизации на уровне метода операции также наследует фильтры от уровня контроллера и глобального уровня. Поэтому, чтобы авторизация завершилась успешно, должны быть пройдены все фильтры: имя пользователя должно быть «badri», одна из ролей — «admin», а пользователь должен быть аутентифицирован.

Рис. 4. Применение фильтра авторизации на трех уровнях

Готовый AuthorizeAttribute крайне полезен, но, если вам нужна адаптация, вы можете создать его подкласс, чтобы реализовать дополнительное поведение авторизации. Следующий код показывает собственный фильтр авторизации:

Этот фильтр просто проверяет наличие заявки «admin», но вы можете использовать участника системы безопасности и любую другую дополнительную информацию из HttpActionContext для выполнения собственной авторизации.

В первой версии ASP.NET Web API фильтры собственной авторизации зачастую ошибочно использовались для реализации аутентификации, но в случае ASP.NET Web API 2 фильтры аутентификации теперь занимают свое место в конвейере, и это помогает разработке ясного, модульного кода с четким разделением обязанностей по аутентификации и авторизации.

Переопределение фильтров

Как я уже пояснял, фильтр авторизации можно применять на трех уровнях. Указывая фильтр Authorize на глобальном уровне, вы можете ввести в действие авторизацию при вызовах всех методов операций между всеми контроллерами. Если вы хотите исключить из глобальной проверки несколько методов, то проще сделать это с помощью атрибута AllowAnonymous.

Код на рис. 5 демонстрирует применение атрибута AllowAnonymous на уровне контроллера. Хотя фильтр авторизации применен глобально, атрибут AllowAnonymous, используемый с PublicResourcesController, исключает из процесса авторизации запросы, поступающие этому контроллеру.

Рис. 5. Применение атрибута AllowAnonymous

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

В ASP.NET Web API 2 введен новый тип фильтра специально для такого сценария — переопределяющий фильтр (override filter). В отличие от AllowAnonymous переопределяющие фильтры, появившиеся в ASP.NET Web API 2, могут работать с фильтром любого типа. Переопределяющие фильтры, как и предполагает их название, переопределяют фильтры, сконфигурированные на более высоких уровнях. Чтобы переопределить фильтры аутентификации, настроенные на более высоких уровнях, используйте готовый атрибут OverrideAuthentication. Если у вас есть фильтр аутентификации, действующий глобально, и нужно предотвратить его выполнение для конкретного метода операции или контроллера, вы может просто применить OverrideAuthentication на требуемом уровне.

Переопределяющие фильтры гораздо полезнее простого отключения конкретных фильтров. Скажем, у вас есть два фильтра аутентификации (один для аутентификации по маркеру защиты, а другой для аутентификации по паре «имя пользователя — пароль» в базовой схеме HTTP. Оба фильтра применены на глобальном уровне, делая ваш API достаточно гибким для принятия либо маркера, либо имени и пароля пользователя. В следующем коде показаны два фильтра аутентификации, примененные глобально:

Теперь, возможно, вы предпочли бы сделать так, чтобы для доступа к конкретному методу операции использовался только маркер. Чем тут может помочь OverrideAuthentication, если он просто прекращает работу всех фильтров? И здесь проявляется важная особенность переопределяющих фильтров: они отменяют все фильтры, указанные на более высоких уровнях, но не удаляют фильтры, определенные на том же уровне, что и они сами. Фактически это означает, что вы можете добавить один или более фильтров аутентификации на конкретном уровне, в то же время отключив все остальное на более высоких уровнях. Теперь вернемся к требованию использовать в качестве удостоверения только маркер для доступа к конкретному методу операции. Вы можете просто указать атрибут OverrideAuthentication и TokenAuthenticator на уровне метода операции, как показано в следующем коде (он гарантирует, что для метода операции GetAllowedForTokenOnly будет выполняться только TokenAuthenticator):

Таким образом, переопределяющие фильтры, введенные в ASP.NET Web API 2, обеспечивают гораздо большую гибкость в плане глобального задания фильтров и селективной работы фильтров на более низких уровнях — только там, где нужно переопределить глобальное поведение.

В дополнение к атрибуту OverrideAuthentication существует готовый атрибут OverrideAuthorization, который удаляет фильтры авторизации, указанные на более высоких уровнях. В сравнении с AllowAnonymous отличие в том, что OverrideAuthorization удаляет только фильтры авторизации более высокого уровня. Он не удаляет фильтры авторизации, указанные на том же уровне, что и он сам. AllowAnonymous заставляет ASP.NET Web API пропускать вообще весь процесс авторизации, даже если фильтры авторизации определены на том же уровне, что и AllowAnonymous, — они просто игнорируются.

Заключение

Вы можете реализовать аутентификацию в ASP.NET Web API, используя варианты, предоставляемые хостом, а также точки расширения, предоставляемые конвейером ASP.NET Web API. Варианты на основе хоста обеспечивают тесную интеграцию с конвейером хоста и отклоняют неправильные запросы на ранних стадиях конвейера. Точки расширения ASP.NET Web API предлагают более тонкий контроль над процессом аутентификации. Когда вам требуется больший контроль над аутентификацией, использование разных механизмов аутентификации для разных контроллеров или даже методов операций, правильный подход — реализовать обязанности аутентификации через фильтр аутентификации, а обязанности авторизации через фильтр авторизации.

Бадринарайянан Лакшмирагаван (Badrinarayanan Lakshmiraghavan)старший архитектор-консультант в одной из компаний из списка «Fortune 500». Автор книг «Pro ASP.NET Web API Security» и «Practical ASP.NET Web API», изданных Apress в 2013 г. Время от времени пишет в блоге lbadri.wordpress.com.

Выражаю благодарность за рецензирование статьи эксперту Microsoft Дэвиду Мэтсону (David Matson).

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

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

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

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

Что такое код asp aspallowsessionstate

The AspAllowSessionState property enables session state persistence for the ASP application. If the value is set to true, the server creates a new Session object for each connection, session state is accessible, session storage is allowed, Session_OnStart and Session_OnEnd occurs, and the ASPSessionID cookie is sent to the client. If the value is set to false, state access and storage are not allowed, events are not processed, and no cookie is sent.

The ASP page directive, @ENABLESESSIONSTATE, can be used to override this metabase property.

This property is an application-level property.

Аутентификация в приложениях ASP.NET

Большинство web-сайтов работают в режиме анонимного доступа. Они содержат информацию, которую могут просматривать все желающие, и поэтому не проводят аутентификацию пользователей. Web-приложения ASP.NET предоставляют анонимный доступ к серверным ресурсам посредством назначения учетной записи анонимному пользователю. По умолчанию учетная запись для анонимного доступа имеет имя в виде IUSER _ имя компьютера.

ASP.NET исполняет web-приложения под учетной записью ASPNET. Это означает, что при выполнении задачи, не предусмотренной привилегиями пользователя (например, запись файла на диск), приложение получает отказ в доступе.
Идентификация пользователей применяется в тех случаях, когда нужно предоставить доступ к разделам web -приложения только для определенных пользователей. Это может быть Internet -магазины, форумы, закрытые разделы в корпоративных Intranet -сайтах и так далее.
Безопасность в приложениях ASP.NET основана на трех операциях:

  • Аутентификация – процесс идентификации пользователя для предоставления доступа к какому-то ресурсу приложения (разделу сайта, странице, базе данных, …). Аутентификация основана на проверке сведений о пользователе (например, имени и пароля);
  • Авторизация – процесс предоставления доступа пользователю на основе данных аутентификации;
  • Олицитворение (impersonalisation) – предоставление серверному процессу ASP.NET прав доступа клиента.

Существует три способа аутентификации пользователей в приложениях ASP.NET:

  • аутентификация Windows — применяется для идентификации и авторизации пользователей в зависимости от привилегий учетной записи пользователя. Работает аналогично обычным механизмам сетевой безопасности Windows и выполняется контроллером домена;
  • аутентификация Forms — пользователь вводит логин и пароль в Web -форме, после чего авторизация происходит по списку пользователей, хранящемуся, например, в базе данных. Применяется на большинстве Internet-сайтов при регистрации в Inernet -магазинах, форумах, пр;
  • аутентификация Passport — все пользователи имеют единое имя и пароль, используемые для сайтов, использующих данный тип авторизации. Пользователи регистрируются в службе Microsoft Passport.

Важно отметить, что аутентификация ASP.NET применяются только для web -форм (.aspx -файлы), контролов (.ascx -файды) и прочих ресурсов ASP.NET. HTML-файлы не входят в этот список. Для авторизации доступа к HTML -файлам нужно их зарегистрировать вручную!
Тип аутентификации указывается в конфигурационном файле Web.config :

По умолчанию применяется тип аутентификации Windows. Значение None имеет смысл устанавливать если используется собственная схема аутентификации или анонимный доступ (для повышения производительности).
Аутентификация Windows. Существует 4 типа аутентификации Windows : обычная ( basic ), краткая ( digest ), встроенная ( integated ) и на основе клиентских сертификатов SSL. Обычную и краткую аутентификацию применяют для идентификации имени пользователя и пароля, указываемом в диалоговом окне. Они хорошо работают в Internet , так как данные передаются по HTTP. Базовая аутентификация передает пароль и имя пользователя в кодировке Base 64, которую легко раскодировать. Для повышения безопасности можно использовать базовую аутентификацию совместно с SSL. Базовую аутентификация поддерживают большинство браузеров.
Краткая аутентификация является более безопасной, так как пароль шифруется по алгоритму MD 5. Она поддерживается браузерами Internet Explorer 5.0 и выше, либо на клиентской машине должен быть установлен. NET Framework. Кроме этого, учетные записи пользователей должны храниться в Active Directory.
Встроенная аутентификация применяется для идентификации учетных записей Windows и не может применяться в Internet , так как клиент и сервер должны пройти проверку контроллером домена. При этом пароли по сети не передаются, что увеличивает безопасность приложения. Этот тип аутентификации блокируется файрволами и работает только с Internet Explorer. Встроенная аутентификации немного медленнее, чем базовая или краткая.
Применение сертификатов SSL так же обычно применяется в Intranet , т.к. требует раздачи цифровых сертификатов. При этом типе аутентификации пользователям не нужно регистрироваться. Сертификаты можно сопоставить учетным записям пользователей в домене или Active Directory.

Для указания способа аутентификации нужно выполнить следующие действия:
1. Запустить диспетчер IIS
2. Щелкнуть правой кнопкой мыши по приложению и выбрать в контекстном меню Свойства.
3. В появившимся диалоге перейти на вкладку Безопасность каталога и нажать кнопку Изменить в разделе Анонимный доступ и проверка подлинности.

4. В диалоге Методы проверки подлинности указать тип аутентификации.

5. Указать права доступа к папке или отдельным файлам в папке Web -приложения. Обязательно нужно разрешить доступ для пользователя ASPNET.

Для поддержки URL-авторизации при Windows-аутентификации для защиты содержимого папок применяются Web.config файлы, находящиеся в этих папках. Структура файла такова (cимвол «*» означает всех пользователей):

В данном случае разрешен доступ для пользователя DENIS и запрещен доступ для всех остальных. Вместо имени пользователя может быть и название роли, к которой принадлежат пользователи – администраторы, менеджеры, …:

Если мы хотим защитить он неаутентифицированных пользователей папку полностью (например, папку, содержащую формы для администрирования сайта), то нужно разместить в ней файл Web.config с таким содержанием (cимвол «?» означает анонимных неавторизированных пользователей):

Если же мы хотим защитить только один файл (например, для подтверждения заказа в Internet -магазине), то в Web.config из корневой папки нужно добавить такие строки:

Приложение извлекает данные пользователей с помощью свойства Identity класса User. Это свойство возвращает объект, содержащий имя пользователя и роль.

bool authenticated = User.Identity.IsAuthenticated ;
string name = User.Identity.Name;
bool admin = User.IsInRole(«Admins»);

Forms-аутентификация

При использовании Forms-аутентификации запрос параметров регистрации (например, логина и пароля) происходит в web-форме. Регистрационная страница указывается в файле Web.config. При первом обращении к защищаемым страницам ASP.NET перенаправляет пользователя на страницу для ввода пароля. При успешной регистрации аутентификационные данные сохраняются в виде cookie и при повторном обращении к защищенным страницам регистрация не требуется.
Для того, чтобы использовать Forms-аутентификацию в файле Web.config в корневой папке приложения нужно указать страницу для ввода пароля:

При попытке просмотра защищенной страницы ASP.NET проверяет, есть ли аутентификационных cookie в запросе. Если cookie нет, то запрос перенаправляется на страницу для регистрации, если есть — ASP.NET дешифрует cookie и извлекает из него регистрационную информацию.

На форме находятся поля для ввода логина и пароля и флажок для сохраняемой регистрации. При нажатии кнопки «Войти» происходит поиск пользователя с таким логином и паролем. Если такой пользователь найден, вызывается функция FormsAuthentication.RedirectFromLoginPage (), в которой указывается идентификатор пользователя и флаг для сохраняемой регистрации. Если же нет – выводится сообщение об ошибке.

protected void btnLogin_Click(object sender, System.EventArgs e)
<
if (!IsValid) // проверяем правильность введенных данных
return;

OleDbConnection connection = GetDbConnection();

OleDbCommand command = new OleDbCommand(string.Format(«SELECT «, login, password), connection);

OleDbDataReader reader = command.ExecuteReader();
if (!reader.Read()) // пароль или логин неверны
<
lblError.Text = «Неверный пароль – попробуйте еще раз»;
return ;
>

string >
FormsAuthentication.RedirectFromLoginPage(id, chkbRememberLogin.Checked);
>
catch (OleDbException ex)
<
lblError.Text = «Ошибка базы данных»;
>
finally
<
connection.Close();
>
>

Аутентификации на основе ролей

Затем при каждом запросе нужно связывать учетные записи пользователей и роли. Обычно это делается в обработчике события AuthenticateRequest в файле Global.asax.

protected void Application_AuthenticateRequest(Object sender, EventArgs e)
<
HttpApplication appl = (HttpApplication)sender;

В коде проверяется тип аутентификации пользователя и то, что он уже зарегистрирован. Имя пользователя извлекается из cookie свойством Name. Таблица с именами пользователей и их ролями для повышения быстродействия была сохранена в объекте Application. Из этой таблицы и находим роль пользователя, которую сохраняем в объекте GenericPrincipal.

Параметры аутентификации

Когда сеансовый cookie возвращается в следующих после регистрации запросах, он автоматически обновляется, если время жизни истекло больше чем на половину. Время же жизни сохраняемых cookie равно 50 годам.
Можно указать имя аутентификационных cookie , поместив его в атрибут name (имя по умолчанию — ASPXAUTH ):

По умолчанию аутентификацонные cookie шифруются и проверяются. Уровень защиты можно указать через атрибут protection , значение по умолчанию которого All. Значение Validation предписывает только проверку cookie , а значение Encript – только шифрование. Полностью отключить защиту можно указав значение None. Отключать защиту имеет смысл если данные передаются по протоколу HTTPS.

Сброс forms-аутентификации

Сброс регистрации можно увидеть на многих сайтах. Для сброса аутентификации применяется метод FormsAuthentication.SignOut (). Он устанавливает дату окончания действия cookie на прошедшее время и cookie автоматически уничтожается.

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

Для использования Passport аутентификации в web -приложении нужно установить Passport SDK. Passport SDK предоставляется бесплатно для тестирования, но для коммерческого использования на сайте необходимо приобретать лицензию.
При обращении к приложению с Passport аутентификацией проверяется наличие cookie с данные Passport. Если такого файла нет, пользователь перенаправляется на страницу для регистрации Passport.
Для включения данного режима аутентификации в файле Web. config нужно указать следующее:

Для обязательной регистрации всех посетителей сайта в разделе autorization нужно запретить доступ неавторизированным пользователем:

Просмотрите мой код аутентификации ASP.NET

У меня возникли проблемы с аутентификацией в ASP.NET. Я не использую большую часть встроенной аутентификации в .NET.

Я получил некоторые жалобы от пользователей, использующих Internet Explorer (любая версия — может повлиять и на другие браузеры), что процесс входа в систему продолжается, но при перенаправлении они не аутентифицированы и возвращаются на страницу входа в систему (страницы, требующие проверки подлинности при регистрации и если не перенаправить обратно на страницу входа в систему). Это может быть проблема с печеньем?

Нужно ли проверять, разрешены ли файлы cookie пользователем?

Какой лучший способ создать аутентификацию, если у вас есть пользовательская таблица-член и не хотите использовать элементы управления входами ASP.NET?

Вот мой текущий код:

Попробуйте использовать встроенную функцию asp.net Аутентификация форм (членство).

Вы можете узнать из этих видеороликов:

Если вы хотите настроить его, смотрите это видео:

Классический случай сверхструктурированного механизма аутентификации, и, кроме того, дизайн плохой.

Исключения должны быть вне класса Auth, но находиться в одном и том же пространстве имен. Представьте себе, как будет выглядеть инфраструктура .Net, если бы Microsoft создала исключения вроде этого. Всегда держите его простым и глупым (KISS). Кажется, вам нужен модульный код. Попробуйте быть простой, но модульной.

Ключи Client Client — это статические магические значения, и вы отправляете их с помощью своих сборок. Используйте SecureString вместо строки readonly. Любой может схватить его, используя Reflector. Как вы поддерживаете безопасность рекламы в объявлениях?

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

RequireClientOfType — int [] — почему в мире вы хотите это сделать? Я полагаю, что это могло быть переименование или неизменяемая структура, если это вообще было необходимо.

Вы уже используете FormsAuthentication в своем Login() и Logout(), который достаточно для замены всего вашего Auth. Почему вы хотите заново изобрести колесо, если в конечном итоге вы собираетесь использовать FormsAuthnetication, чтобы позаботиться об Auth.

И да, если вы не можете пересмотреть этот дизайн, используйте FxCop/StyleCop, по крайней мере, чтобы избежать спагетти-кода.

Также вы можете сделать класс Auth как static и выставить такие функции, как FormsAuthentication. А также переименуйте его с Auth на Аутентификация.

Аутентификация 2FA с помощью SMS¶

В этой статье я расскажу вам, как настроить двухфакторную аутентификацию (2FA) с помощью SMS. Здесь используется Twilio, но вы можете использовать любой другой SMS провайдер.

Создание новогоASP.NET Core проекта¶

Создайте новыйASP.NET Core проект с отдельными пользовательскими аккаунтами.

После создания проекта следуйте инструкциям в Подтверждение аккаунта и восстановление пароля , чтобы настроить SSL.

Настройка SMS для двухфакторной аутентификации с помощью Twilio¶

Note: