Я использую WsFed для реализации единого входа ADFS в приложении. Чтобы правильно выйти, я должен указать схемы CookieAuthenticationDefaults.AuthenticationScheme
и WsFederationDefaults.AuthenticationScheme
для метода SignOut
. Если я использую только схему cookie, я не выхожу из системы. Если я использую только схему WsFed, я выхожу из системы, но могу автоматически пройти повторную аутентификацию, если я нажму кнопку «Назад» в браузере.
На данный момент я указываю их обоих для метода SignOut. Однако я не хочу, чтобы эти схемы были в нескольких местах (Startup.cs и действие контроллера).
Я знаю, что если я не предоставлю схему, то по умолчанию она будет равна одной, как в моем действии Login
. Но можно ли установить по умолчанию две схемы или нужно жестко запрограммировать только одну из них в действии?
Действие выхода:
[AllowAnonymous]
[HttpGet]
public IActionResult Logout()
{
return SignOut(
new AuthenticationProperties
{
RedirectUri = Url.Action("LoggedOutSuccessfully", "NameController"),
},
WsFederationDefaults.AuthenticationScheme,
CookieAuthenticationDefaults.AuthenticationScheme);
}
Схема Startup.cs по умолчанию настроена:
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
//need two schemes here (or somewhere) instead of one
sharedOptions.DefaultSignOutScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
//... WsFed options
})
.AddCookie(options =>
{
//... cookie options
});