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

Web API 2,OWIN认证,SignOut不注销,第1张

概述我正在做一些研究工作,以使用承载令牌作为身份验证机制(即AngularJS UI,通过OWIN在Web API [2]项目中进行身份验证)。 我的登录工作正常,角色信息和一切都很好,但我不能得到令牌注销。 我的启动配置是这样的: OAuthOptions = new OAuthAuthorizationServerOptions() { TokenEndpointPath = new Pa 我正在做一些研究工作,以使用承载令牌作为身份验证机制(即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,并跟踪您的服务 – 您需要手动构建类似的内容。

总结

以上是内存溢出为你收集整理的Web API 2,OWIN认证,SignOut不注销全部内容,希望文章能够帮你解决Web API 2,OWIN认证,SignOut不注销所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1114715.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存