Подтвердить что ты не робот

SignInManager, что это и как, когда использовать?

Я изучаю класс SignInManager. Но информация, предоставленная на MSDN, очень бесполезна. Он сообщает только, какие существуют методы и свойства.

Я ищу,

1) Что такое SignInManager? 2) Как его использовать? 3) И у меня есть моя собственная база данных, содержащая учетную информацию (имя пользователя и пароль)

Как я могу использовать SignInmanager и как его использовать, чтобы моя пользовательская база данных использовалась для аутентификации пользователей?

Я использую asp.net MVC 5 и Visual Studio 2015. В моем примере проекта у меня есть контроллер учетных записей, содержащий методы действий, такие как

  public async Task<ActionResult> ExternalLoginCallback(string returnUrl)

Но я понятия не имею, как его использовать, MSDN совершенно бесполезно предоставлять информацию об этом. Любые полезные ссылки, которые объясняют это подробно, потому что я понятия не имею, что такое SignInManager и для чего он нужен.

Спасибо

4b9b3361

Ответ 1

Отказ от ответственности: меня смущает модель, используемая в идентификаторе ASP.NET, и я говорю, что это мое понимание вещей, которое может быть неточным (я могу также заявить очевидные вещи, поэтому я извиняюсь). Кроме того, я недавно играл с идентичностью Asp.Net Core, которая немного отличается от того, что было доступно для Asp.Net 4, поэтому я могу смешивать вещи.

Cookies

Идентификатор ASP.NET работает с двумя типами файлов cookie: Cookie приложения и внешний файл cookie. Приложение cookie содержит идентификатор вашего приложения и выдается менеджером входа. Внешний файл cookie содержит идентификатор поставщика внешней аутентификации и выдается промежуточным программным обеспечением аутентификации (например, FacebookAuthenticationMiddleware, например). Вы используете диспетчер входных данных, чтобы использовать внешний файл cookie и вызывать cookie приложения. Если вы не используете внешнюю аутентификацию, вы не имеете дело с внешними кукисами.

Менеджер входа

Класс объявлен следующим образом:

public class SignInManager<TUser, TKey> : IDisposable 
    where TUser : class, IUser<TKey> 
    where TKey : IEquatable<TKey>

Таким образом, вы можете использовать любой класс в качестве пользователя, если он реализует интерфейс IUser<TKey>. Или используйте IdentityUser в качестве базы, если вы начнете с нуля, что реализует IUser<string>. Раньше я пытался создать реализацию, которая использует int как TKey, но забросила попытку, потратив довольно много времени, пытаясь заставить ее работать и не видя никакого прогресса.

Ввод пароля

SignInManager.SignInAsync метод выдает cookie приложения для указанного пользователя сразу без каких-либо проверок, поэтому, если вы реализуете какую-либо пользовательскую логику аутентификации, вы можете использовать ее (шаблон asp.net MVC по умолчанию использует его после регистрации пользователя, чтобы они не 't должны пройти аутентификацию сразу после регистрации).

SignInManager.PasswordSignInAsync, учитывая, что имя пользователя и пароль проверяют их достоверность и вызывают файлы cookie приложения, если они верны.

Внешний знак

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

Asp.Net Identity имеет понятие User и Login, где User - это... ну, пользователь (человек) и Login - это учетные данные, с которыми User аутентифицируется. User может иметь несколько Login s.

Поток OAuth, как видно на веб-сайте Asp.Net, выглядит так (на основе потока журнала по умолчанию, генерируемого шаблоном VS):

  • Вы настроили поставщиков внешней аутентификации (промежуточное ПО аутентификации), которые вы готовы принять (вероятно, это относится к регистрации на внешнем веб-сайте. Например, чтобы использовать аутентификацию Facebook, вам необходимо создать приложение Facebook, настройте URL-адрес возврата чтобы указать на свой веб-сайт и настроить FacebookAuthenticationMiddleware с помощью идентификатора приложения и приложения, которое предоставляет Facebook).
  • Вы представляете не прошедшего проверку пользователя пользователя с выбором внешних поставщиков, которые вы поддерживаете.
  • Пользователь выбирает поставщика, выбор отправляется в ваше веб-приложение Asp.Net.
  • В веб-приложении выдается сообщение ChallengeResult, содержащее имя используемого провайдера (обычно это происходит в AccountController.ExternalLogin), для URL-адреса возврата выбрано обращение к вызову AccountController.ExternalLoginCallback, и фактический URL-адрес возвращаемого URL-адреса должен быть включен для сохранения позже.
  • Соответствующее промежуточное ПО ловит объект ChallengeResult и преобразует его в ответ перенаправления HTTP, который заставляет браузер пользователя перейти на сторонний веб-сайт, запрашивающий у пользователя учетные данные.
  • Веб-сайт третьей части после успешной проверки подлинности перенаправляет пользователя на ваш веб-сайт на конкретный URL-адрес, созданный промежуточным программным обеспечением для проверки подлинности (для Facebook it /signin-facebook IIRC).
  • Средство промежуточной проверки подлинности перехватывает этот вызов, проверяет данные, переданные сторонним веб-сайтом, и если все ОК выдает внешний файл cookie и перенаправляет вас на все, что было установлено как URL-адрес возврата на шаге 4 (который должен быть AccountController.ExternalLoginCallback).
  • В AccountController.ExternalLoginCallback вы должны будете использовать внешний файл cookie и вместо этого выпустить cookie приложения. Это то, что делает SignInManager.ExternalSignInAsync: с учетом информации в журнале он пытается найти пользователя с этим Login. Если он находит, он выдает Cookie приложения; если это не так, оно сообщает вам, и вы должны делать то, что считаете правильным, когда получаете неизвестный Login (как правило, вы создаете нового пользователя на этом этапе. Реализация по умолчанию из шаблона VS запрашивает дополнительную информацию на данный момент и создает пользователя в AccountController.ExternalLoginConfirmation). После этого пользователь будет перенаправлен на фактический URL-адрес возврата "сохранен для последующего" на шаге 4.

Пользовательское хранилище

До сих пор я не был успешным с созданием специального хранилища для Asp.Net Identity. Обычно это включает в себя реализацию собственного класса пользовательского менеджера, спускающегося с UserManager<TUser, TKey> и класса хранения, реализующего связку интерфейсов, таких как IUserStore<TUser, TKey>, IUserRoleStore<TUser, TKey> и т.д.