В веб-приложении, над которым я работаю, я реализовал вход с ADFS-провайдером WS-Federation без идентификации. Я следовал руководству от Microsoft , и оно работает.
Однако я не до конца понимаю, как оно проходит проверку подлинности. Когда я впервые запускаю действие с атрибутом [Authorized]
, он просит меня войти в систему. После этого я могу запустить любой [Authorized]
без необходимости входа. Если я выйду из системы, мне нужно снова войти в систему, чтобы запустить [Authorized]
действие. Эти части имеют смысл.
Чего я не понимаю, так это где хранится тот факт, что я заверен? При входе в систему создается повар ie, но я могу вручную удалить этот повар ie и при этом выполнить действие [Authorized]
без необходимости входа в систему. Я полностью выхожу из системы только при запуске метода SignOut
.
Что это за дополнительный слой к повару ie, который держит меня в системе? Этот слой даже истекает, если я не выйду явно? Почему мне не нужно снова входить в систему для запуска [Authorized]
действий, если я удаляю cook ie?
Некоторые действия HomeController:
//I made Login an [Authorized] action. When I press the button to run this action it takes me to the
//login page and I can log in that way.
[Authorize]
public IActionResult Login()
{
return RedirectToAction("Index", "Home");
}
//Secret action only accessible by authorized users. The Secret view displays data about user.
[Authorize]
public IActionResult Secret()
{
Person person = new Person();
person.NameIdentifier = User.FindFirst(ClaimTypes.NameIdentifier).Value;
person.Email = User.FindFirst(ClaimTypes.Email).Value;
person.GivenName = User.FindFirst(ClaimTypes.GivenName).Value;
return View(person);
}
//Logout action runs the SignOut method and returns the SignOutResult. From my understanding,
//that's the way I log out.
[AllowAnonymous]
public IActionResult Logout()
{
return SignOut(
new AuthenticationProperties
{
RedirectUri = "https://dev-app01:8081/"
},
CookieAuthenticationDefaults.AuthenticationScheme,
WsFederationDefaults.AuthenticationScheme);
}
Startup.cs> ConfigureServices
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddWsFederation(options =>
{
options.Wtrealm = Configuration["wsfed:realm"];
options.MetadataAddress = Configuration["wsfed:metadata"];
})
.AddCookie(options =>
{
//I can delete this cookie and still run an [Authorized] action without loggin in again.
options.Cookie.Name = "TestAuthCookie";
});
services.AddControllersWithViews();
}