如何退出Owin提供商?

时间:2016-07-18 22:14:08

标签: c# asp.net-mvc-5 owin

我关注this tutorial但它没有告诉你如何退出。我试着做

class Foo:
    pass
s = 'bar'
eval(s) = Foo

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

只需添加一个动作

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

Request.GetOwinContext().Authentication.SignOut()

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

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

我现在的结果是,我登录后,我转到安全页面并看到它,然后我继续进行退出,然后在注销后尝试返回安全页面,我被允许返回该安全页面。

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

3 个答案:

答案 0 :(得分:17)

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

只使用externalCookie作为Owin的参数,您正在清除Asp的cookie,但不是用于存储Google提供商的Cookie

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

Request.GetOwinContext()
       .Authentication
       .SignOut(HttpContext.GetOwinContext()
                           .Authentication.GetAuthenticationTypes()
                           .Select(o => o.AuthenticationType).ToArray());

这就是Tutorial

所说的内容
  

对UseYogleAuthentication的调用应该非常明显,为什么需要它。

     

但第一个toSetDefaultSignInAsAuthenticationType不是   明显。   登录中间件通常依赖于外部cookie中间件   在社交登录中间件之前注册。   外部cookie中间件,它将自己设置为默认的登录类型。   这就是社交登录中间件如何知道应该使用的   外部cookie。 在此设置中没有外部cookie,所以我们有   手动将主cookie中间件设置为默认的登录类型。   cookie中间件只会发出cookie   AuthenticationType匹配由。创建的标识中的一个   社交登录中间件。在owin外部认证管道上查看社交在

的设置

答案 1 :(得分:4)

尝试设置缓存控制标头。

public ActionResult SignOut() {
    var authenticationTypes = new string[] {
        DefaultAuthenticationTypes.ApplicationCookie,  
        DefaultAuthenticationTypes.ExternalCookie 
    };
    AuthenticationManager.SignOut(authenticationTypes);
    // HACK: Prevent user from being able to go back to a logged in page once logged out
    Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetNoStore();
    // now redirect
    return RedirectToAction("Index", "Home");    
}

private IAuthenticationManager AuthenticationManager {
    get {
        return Request.GetOwinContext().Authentication;
    }
}

除非您尝试使用可以禁用的JavaScript,否则无法停止用户单击浏览器上的后退按钮。用户可以返回页面并查看上一页的内容,但如果他们尝试单击任何受保护的链接或刷新页面,他们将被重定向以登录。

答案 2 :(得分:0)

对需要授权的类使用[Authorize]属性:

 [Authorize]
public class MeController : ApiController
{
    // GET api/<controller>
    public IEnumerable<object> Get()
    {
        var identity = User.Identity as ClaimsIdentity;
        return identity.Claims.Select(c => new
        {
            Type = c.Type,
            Value = c.Value
        });
    }
}

来源:http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server