Что такое схемы и обработчики и как они связаны?

Я пытаюсь понять, как работает пакет Microsoft Identity для аутентификации пользователей.

Мне непонятно, что такое схемы и обработчики и как они используются друг с другом.

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

Есть некоторые моменты, которые для меня пока неясны:

  • Что такое схемы и обработчики и как они связаны?
  • Что такое string authenticationType передается конструктору ClaimsIdentity(IEnumerable<Claim>? claims, string? authenticationType) и связано ли это со схемами и обработчиками или нет?
  • Какая схема используется при входе пользователя с помощью SignInManager.PasswordSignInAsync(TUser user, string password, bool isPersistent, bool lockoutOnFailure), предоставляемого пакетом удостоверений?

Параметр ClaimauthenticationType на самом деле больше не используется — я думаю, что он был актуален только во времена .NET Framework 2.x-4.x, если вы использовали WS-Security или Windows Identity Foundation. Я когда-либо видел, чтобы свойство было пустым или содержало какое-то короткое значение-заглушку при использовании библиотеки OIDC ASP.NET Core.

Dai 23.08.2024 09:10

«Какая схема используется при входе пользователя с помощью SignInManager.PasswordSignInAsync» — это зависит от того, как вы ее настроили, поэтому нам нужно увидеть ваш код Startup или Program (т. е. ваши методы ConfigureServices и Configure — или их эквиваленты), чтобы дать вам ответ.

Dai 23.08.2024 09:21
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
2
50
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Что такое схемы и обработчики и как они связаны?

Схема аутентификации — это особый способ аутентификации клиента или запроса.

Обработчик аутентификации — это class или функция промежуточного программного обеспечения, которую ASP.NET Core использует для выполнения процесса аутентификации по запросу.

В контексте ASP.NET Core 3.1 или более поздней версии наиболее распространенными схемами аутентификации, с которыми вы столкнетесь, являются:

  • Файлы cookie — Microsoft.AspNetCore.Authentication.Cookies (имя по умолчанию: "Cookies")
  • OAuth2 — Microsoft.AspNetCore.Authentication.OAuth (без имени по умолчанию; часто подразумевает использование JWT для доступа к другим ресурсам, а также использование файлов cookie для хранения этих токенов JWT и другой информации аутентификации для пользователей веб-браузера)
  • OIDC — Microsoft.AspNetCore.Authentication.OpenIdConnect (как и в случае с OAuth2, ASP.NET Core объединит эту схему с файлами cookie, чтобы пользователи веб-браузера могли использовать аутентификацию без сохранения состояния)
  • JWT — Microsoft.AspNetCore.Authentication.JwtBearer — используйте эту схему, если ваш код ASP.NET Core является веб-сервисом («веб-API») — он не подходит для использования в веб-приложениях MVC с пользователями веб-браузера и если вы не используете OAuth2. или ОИДК. Не используйте эту схему напрямую, если вы используете OAuth2/OIDC, даже если они используют JWT, потому что библиотеки этих других схем берут на себя множество обязанностей, которые вам придется писать здесь вручную (например, криптографические ключи для JWT-проверка).

Что такое параметр (string authenticationType, передаваемый конструктору ClaimsIdentity(IEnumerable<Claim>? claims, string? authenticationType), и связан ли он со схемами и обработчиками или нет?

Если вы не используете ASP.NET Core Identity, вам не о чем беспокоиться, поскольку он больше нигде не используется; и текущая документация (.NET 8) содержит ссылки только на схемы старой школы, такие как HTTP Basic, NTLM, Kerberos и Passport.

"Passport" was Microsoft's first-attempt at their own first-party semi-federated SSO thing around 1999 - it was killed-off sometime around 2003-ish, which was after ASP.NET first launched, which is why ASP.NET (for .NET Framework) has vestigial references to it still. Passport's successor was launched around 2005 as "Windows Live ID" which eventually turned into today's "Microsoft Account" around 2011-ish?

Но если вы используете ASP.NET Core Identity и используете несколько схем аутентификации, то SignInManager (и в некоторых других местах) используйте это свойство, чтобы проверить, аутентифицирован ли текущий пользователь запроса с помощью определенного SignInManager с помощью значение свойства SignInManager.AuthenticationScheme, которое вы настраиваете во время запуска).

Какая схема используется при входе пользователя с помощью SignInManager.PasswordSignInAsync(TUser user, string password, bool isPersistent, bool lockoutOnFailure), предоставляемого пакетом удостоверений?

Согласно исходному коду, если вы используете MapIdentityApi с ASP.NET Core Identity, то для SignInManager.AuthenticationScheme будет установлено значение "Identity.Application" или "Identity.Bearer" (в зависимости от того, настроено ли ASP.NET Core Identity для файлов cookie или токенов на предъявителя соответственно) .

Если вы не используете MapIdentityApi, а используете метод AddDefaultIdentity ASP.NET Core Identity, тогда используется "Identity.External" для DefaultSignInScheme и «Identity.Application» для собственной схемы файлов cookie.

Это проясняет ситуацию, но есть еще кое-что, о чем я хочу узнать в аутентификации на основе файлов cookie. Пользователю предоставляется токен внутри файла cookie, и этот токен используется для аутентификации этого пользователя в каждом последующем запросе. Как это сделать без привязки токена к пользователю в базе данных?

Hossam Zaki 26.08.2024 13:25

@HossamZaki Токен криптографически подписан IdP: промежуточное программное обеспечение аутентификации вашего приложения проверит подпись с помощью открытого ключа, опубликованного IdP. RP (то есть вашему приложению) не нужна никакая «база данных». Все это построено на доверии: RP доверяет IdP, чтобы знать, кто его пользователи.

Dai 26.08.2024 18:37

спасибо, что прояснили, ценю помощь.

Hossam Zaki 27.08.2024 08:39

В ядре asp.net Схема — это именованная конфигурация, определяющая способ аутентификации приложения. Также можно понимать, что схема аутентификации — это имя обработчика, а также возможность настройки конкретного экземпляра обработчика. . Схемы аутентификации связаны с соответствующими обработчиками, которые отвечают за фактическое выполнение логики аутентификации. Например, вы можете настроить схему аутентификации с помощью файлов cookie и схему аутентификации JWT.

Обработчики — это типы, которые реализуют поведение схемы и в основном отвечают за аутентификацию пользователей. Каждый обработчик связан с определенной схемой аутентификации и отвечает за обработку запросов аутентификации для этой схемы. Например, обработчик файлов cookie обрабатывает аутентификацию на основе файлов cookie, а обработчик JWT — аутентификацию на основе JWT.

В ClaimsIdentity(IEnumerable<Claim>?claims, string?authenticationType)инициализирует новый экземпляр класса ClaimsIdentity, используя указанные утверждения и тип аутентификации, где строка аутентификацииType указывает используемый тип аутентификации.

SigninManager используется для предоставления API для входа пользователя, который содержит схему аутентификации, используемую для входа в систему, а по умолчанию используется ApplicationScheme, который используется для идентификации файлов cookie аутентификации приложения, PasswordSignInAsync(TUser user, string password, bool isPersistent, bool lockoutOnFailure) является одним из методов API. Он указывает на попытки входа в указанную комбинацию имени пользователя и пароля как асинхронную операцию. Поэтому при использовании метода SignInManager.PasswordSignInAsync схема идентификации ASP.NET Core по умолчанию является схемой аутентификации на основе файлов cookie.

Другие вопросы по теме