gpt4 book ai didi

c# - OWIN SignOut 不会删除 cookie

转载 作者:IT王子 更新时间:2023-10-29 04:45:13 25 4
gpt4 key购买 nike

我在外部身份验证服务器中使用 OWIN 中间件,我的应用程序使用 OAuth 授权代码授予流程对其进行身份验证。

我可以重定向到身份验证服务器,针对外部提供商 (Google) 进行身份验证,然后使用登录用户和应用程序 Cookie 设置重定向回我的客户端应用程序,但是当我尝试注销时,cookie 在我之后仍然存在调用 AuthenticationManager.SignOut 方法。

我在 Startup.Auth.cs 中的 cookie 选项是:

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 authentication, expire current token and remove cookieOWIN - Authentication.SignOut() doesn't remove cookies

运气不好。我知道我可以通过设置一个负的到期日期来手动删除 cookie,但如果可能的话我更愿意使用内置方法。

如何在我注销时删除应用程序 Cookie?

最佳答案

为了让 SignOut 方法标记身份验证票证(cookie)以从客户端移除,您传递到 SignOut 方法的 AuthenticationType 参数和 cookie 上的值必须完全匹配。如果您想从客户端删除多个身份验证票证,那么您必须匹配所有这些 AuthenticationTypes 并将它们作为 string[] 传递给 SignOut 方法。

身份验证票证的 AuthenticationType 通常以主机 Web 容器的名称为前缀(即类似“.AspNet.”的名称),后跟您用于引导 OWIN CookieAuthentication 设置的任何内容。

您似乎在 Startup.Auth.cs 中将 AuthenticationType 字符串值设置为“Application”。尝试简单地调用:

Request.GetOwinContext().Authentication.SignOut("Application");

如果这对您不起作用,我会调试您的应用程序并查看您的应用程序允许的每种类型的经过身份验证的用户的身份的特定 AuthenticationType,记下每个用户的 AuthenticationType 值并尝试将它们全部包括在内在您的 SignOut 调用中的字符串 [] 中。

关于c# - OWIN SignOut 不会删除 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34734082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com