Какова цель методов входа и выхода в ControllerBase?

#asp.net-core-mvc

#asp.net-core-mvc

Вопрос:

Какова цель методов SignIn and SignOut в ControllerBase классе (который наследуется Controller классом).

Эти два метода возвращают a SignInResult и a SignOutResult соответственно, оба наследуются от базового класса ActionResult (который реализует IActionResult ).

Просматривая исходный код SignInResult , и SignOutResult вы видите, что они вызывают HttpContext.Authentication.SignInAsync() и HttpContext.Authentication.SignOutAsync() соответственно.

Но я никогда не видел, чтобы эти два метода где-либо использовались. Если вы посмотрите на AccountController то, что он входит и выходит, используя a ApplicationSignInManager , а не вышеупомянутые методы.

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

Например, что-то вроде этого, например:

 public IActionResult SignIn()
{
    return SignIn(User, "Automatic");
}
  

Но это, по-видимому, ничего не делает. Похоже, что он не регистрирует пользователя и, похоже, ничего не возвращает пользователю. Я не уверен, какие параметры передавать, но я нашел User (из HttpContext контроллера).

Итак, какова цель этих двух методов и как они предназначены для использования?

Ответ №1:

AccountController использует ASP.Идентификатор, который, в свою очередь, под капотом вызывает HttpContext.Authentication.SignInAsync()

Они удобны для людей, которые не хотят использовать ASP.NET Личность и которые хотят все делать сами.

Комментарии:

1. Я понимаю. Вы знаете, почему он ничего не возвращает? Или как это использовать? Какие параметры указать и т. Д.

2. Честно говоря, если вы спрашиваете об этом, это не для вас. Это не значит, что это одна из тех интересных точек интерфейса безопасности, где вам не следует ее использовать, если вы полностью не понимаете ее и то, как промежуточное программное обеспечение для входа и аутентификации взаимодействует. Существует документация о том, как использовать промежуточное ПО cookie без идентификации, которое напрямую использует контекст, docs.asp.net/en/latest/security/authentication/cookie.html , но для большинства людей это не то, чем вы хотите в конечном итоге заниматься.

Ответ №2:

Вторым параметром SignIn метода является AuthenticationScheme строка.

Эта строка может быть:

  • «Носитель»
  • «Cookies»
  • «OpenIdConnect»

Или при использовании сторонних поставщиков аутентификации:

  • «Google»
  • «Facebook»
  • «Microsoft»
  • «Twitter»

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

Если у вас есть какой-либо другой сторонний поставщик аутентификации AuthenticationScheme , строка может быть чем-то другим. Также некоторые поставщики аутентификации (например, UseCookieAuthentication промежуточное программное обеспечение) позволяют указать AuthenticationScheme .