我的登录工作正常,角色信息和一切都很好,但我不能得到令牌注销。
我的启动配置是这样的:
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不注销所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)