如何退出Owin提供商?

cho*_*bo2 17 c# owin asp.net-mvc-5

我正在按照本教程,但它没有告诉你如何注销.我试着这样做

Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie);

Request.GetOwinContext().Authentication.SignOut()

          Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ApplicationCookie);
Run Code Online (Sandbox Code Playgroud)

您可以在此处获取示例代码:https://github.com/AndersAbel/SocialLoginWithoutIdentity

只需要再添加一个动作

public ActionResult SignOut()
 {
       Request.GetOwinContext().Authentication.SignOut(Microsoft.AspNet.Identity.DefaultAuthenticationTypes.ExternalCookie);
       return RedirectToAction("Index", "Home");
 }
Run Code Online (Sandbox Code Playgroud)

这个方法加上我在上面发布的3行中的任何一行

我现在的结果是,我登录后,我转到安全页面,可以看到它,然后我继续我的注销,然后在注销后尝试返回安全页面,我被允许回到该安全页面.

所以它实际上并没有真正让我退出.

小智 18

如本教程中所述,使用的中间件使用默认的身份验证类型,但不要覆盖它.

通过仅使用externalCookie作为Owin的参数,您正在清除Asp的cookie,但不是用于存储Google提供程序的cookie ,

为此,您必须获取所有当前cookie的数组.它可以通过这样简单的方式完成:

Request.GetOwinContext()
       .Authentication
       .SignOut(HttpContext.GetOwinContext()
                           .Authentication.GetAuthenticationTypes()
                           .Select(o => o.AuthenticationType).ToArray());
Run Code Online (Sandbox Code Playgroud)

这就是教程中所说的内容:

对于UseGoogleAuthentication的调用应该非常明显,为什么需要它.

但第一个toSetDefaultSignInAsAuthenticationType并不那么明显.登录中间件通常依赖于社交登录中间件之前注册的外部cookie中间件.外部cookie中间件,它将自己设置为默认的登录类型.这就是社交登录中间件知道应该使用外部cookie的方式.在此设置中没有外部cookie,因此我们必须手动将主cookie中间件设置为默认的登录类型. 如果AuthenticationType与社交登录中间件创建的身份中的一个匹配,则cookie中间件将仅发出cookie.在owin外部认证管道中查找社交的设置