#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»
Вместо передачи этого параметра в виде жестко запрограммированной строки вы можете использовать константу.
AspNetCore.Authentication.JwtBearer.JwtBearerDefaults.AuthenticationScheme
AspNetCore.Authentication.Cookies.CookieAuthenticationDefaults.AuthenticationScheme
AspNetCore.Authentication.OpenIdConnect.OpenIdConnectDefaults.AuthenticationScheme
AspNetCore.Authentication.Google.GoogleDefaults.AuthenticationScheme
AspNetCore.Authentication.Facebook.FacebookDefaults.AuthenticationScheme
AspNetCore.Authentication.Twitter.TwitterDefaults.AuthenticationScheme
AspNetCore.Authentication.MicrosoftAccount.MicrosoftAccountDefaults.AuthenticationScheme
Если у вас есть какой-либо другой сторонний поставщик аутентификации AuthenticationScheme
, строка может быть чем-то другим. Также некоторые поставщики аутентификации (например, UseCookieAuthentication
промежуточное программное обеспечение) позволяют указать AuthenticationScheme
.