Я использую промежуточное ПО OWIN на внешнем сервере аутентификации, чтобы мои приложения аутентифицировались с использованием потока предоставления кода авторизации OAuth.
Я могу перенаправить на сервер проверки подлинности, пройти аутентификацию против внешнего провайдера (Google) и перенаправить обратно на свое клиентское приложение с зарегистрированным пользователем и Cookie приложения, но все же, когда я пытаюсь выписать cookie, остается после того, как я вызовите метод AuthenticationManager.SignOut
.
Мои параметры файла cookie в Startup.Auth.cs
:
var cookieOptions = new CookieAuthenticationOptions
{
Provider = cookieProvider,
AuthenticationType = "Application",
AuthenticationMode = AuthenticationMode.Passive,
LoginPath = new PathString("/Account/Index"),
LogoutPath = new PathString("/Account/Logout"),
SlidingExpiration = true,
ExpireTimeSpan = TimeSpan.FromMinutes(30),
};
app.UseCookieAuthentication(cookieOptions);
app.SetDefaultSignInAsAuthenticationType(DefaultAuthenticationTypes.ExternalCookie);
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
Мой метод входа:
var loginInfo = await AuthManager.GetExternalLoginInfoAsync();
SignInManager.ExternalSignInAsync(loginInfo, true);
var identity = AuthManager.AuthenticateAsync(DefaultAuthenticationTypes.ExternalCookie).Result.Identity;
if (identity != null)
{
AuthManager.SignIn(
new AuthenticationProperties {IsPersistent = true},
new ClaimsIdentity(identity.Claims, "Application", identity.NameClaimType, identity.RoleClaimType));
var ticket = AuthManager.AuthenticateAsync("Application").Result;
var identity = ticket != null ? ticket.Identity : null;
if (identity == null)
{
AuthManager.Challenge("Application");
return new HttpUnauthorizedResult();
}
identity = new ClaimsIdentity(identity.Claims, "Bearer", identity.NameClaimType, identity.RoleClaimType);
AuthManager.SignIn(identity);
}
return Redirect(Request.QueryString["ReturnUrl"]);
Способ выхода:
var authTypeNames = new List<string>();
authTypeNames.Add("Google");
authTypeNames.Add("Application");
authTypeNames.Add("Bearer");
authTypeNames.Add(DefaultAuthenticationTypes.ExternalCookie);
Request.GetOwinContext().Authentication.SignOut(authTypeNames.ToArray());
Я рассмотрел другие вопросы: Аутентификация OWIN, истечение текущего токена и удаление файла cookie а также OWIN - Authentication.SignOut() не удаляет файлы cookie
не повезло. Я знаю, что могу вручную удалить cookie, установив отрицательную дату истечения срока действия, но я предпочел бы использовать встроенный метод, если это возможно.
Как я могу удалить Cookie приложения при выходе из системы?