Web API 2,OWIN认证,SignOut不注销

前端之家收集整理的这篇文章主要介绍了Web API 2,OWIN认证,SignOut不注销前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在做一些研究工作,以使用承载令牌作为身份验证机制(即AngularJS UI,通过OWIN在Web API [2]项目中进行身份验证)。

我的登录工作正常,角色信息和一切都很好,但我不能得到令牌注销。

我的启动配置是这样的:

OAuthOptions = new OAuthAuthorizationServerOptions() {
    TokenEndpointPath = new PathString("/Token"),Provider = new ApplicationOAuthProvider(PublicClientId),AccessTokenExpireTimeSpan = SESSION_TIMEOUT,AllowInsecureHttp = true
};

我的注销动作就是这样:

public HttpResponseMessage logout() {
    var authentication = HttpContext.Current.GetOwinContext().Authentication;
    authentication.SignOut(DefaultAuthenticationTypes.ExternalBearer);

    return new HttpResponseMessage(HttpStatusCode.OK);
}

为了简洁起见,我已经将所有的身份验证信息都留下了,但是确认在设置令牌时使用ExternalBearer。

在我的UI中,我将该令牌存储在本地存储中(这里没有cookie,这是一个故意的设计决定)。所以我在我的用户界面上有一个注销按钮,该注销操作被击中,代码运行正常。

但是,如果我随后在需要授权的API上执行了一项操作,则该请求仍然会被通过(即使用户仍然被认证,即使它们已被注销。

要么我错过了一些非常明显的事情(不会是第一次;-)或者还有一些更重要的事情在这里 – 最后我在ping @ @ @ @ @ @ @ @ @

任何帮助或见解将得到感激之情。

只有我能想到的是,该令牌在服务器/ API端是无状态的,因此不能过期或注销。

如果是这样,我想我可以:

a)添加一个刷新令牌,创建一个过去的过期的新令牌 – 这甚至可以工作吗? – 实际上取消了,它会发出一个新的令牌…旧的仍然是有效的

b)将承载令牌存储在数据库中并检查每次,在注销时删除令牌(自然盐化,散列等)。然而,这只是让我们回到拥有一个有状态的服务器。

c)当有人明确注销时,我可以(并将)从本地存储中删除令牌,但是如果一个恶意可以拦截该令牌,令牌仍然在技术上有效。以上所有这些都将超过SSL,这应该会阻止坏家伙/女孩。

d)也许这就是为什么很多人将承载令牌存储在cookie(作为存储机制)中,所以一旦您注销,最少cookie将在下次刷新时被删除

对不起,上面是一个脑子转储,只是想先避免任何问题

解决方法

由于OAuth不是身份验证协议,因此没有注册的概念。删除客户端上的访问令牌 – 这就是你可以做的。

如果要使服务器端的令牌无效,请向其中添加一个唯一的ID,并跟踪您的服务 – 您需要手动构建类似的内容

猜你在找的HTML相关文章