撤消OAuthBearerAuthentication的访问令牌

时间:2015-01-08 09:03:28

标签: c# asp.net asp.net-web-api oauth

我已经设置了Web API的身份验证,这与来自Taiseer Joudeh的oauth-refresh-tokens几乎完全相同。

在遇到问题之前,它完美无缺:

  • 我们有用户A和用户B当前已登录系统。
  • 用户A作为管理员,从系统中删除用户B.
  • 用户B仍有权访问网络,直到 令牌 已过期

我做了一些研究,他们都说撤销访问令牌非常困难(或者在OAuth中不可能)。我唯一能做的就是将超时设置得更短。它仍然在我的脑海中出现故障,我不喜欢访问令牌仍然有效(尽管是有限的)时间帧之后的想法。

那么,是否有更好的方法或任何建议将不胜感激。

3 个答案:

答案 0 :(得分:2)

按照设计时使用refresh_tokenaccess_token,并将访问令牌的生命周期缩短到您可以接受的持续时间,并尽可能低。由于您既是资源服务器和授权服务器,渐近线意味着您最终会在每次调用时检查用户,如其他答案所示,但是:

使用DB来存储访问令牌很可能会导致缓存令牌以优化性能,在这种情况下,您最终会遇到与刷新令牌相同的情况,其中缓存过期超时等同于访问令牌生存期。

最后,你不能吃蛋糕,也不能吃它,所以我建议按照OAuth的设计去做。

答案 1 :(得分:0)

感谢您推荐和使用我的博客文章,请检查此answer,因为您需要在数据库中存储访问令牌标识符,如果您要撤消它们。

答案 2 :(得分:0)

如果您针对每个请求的数据库表检查用户,则可以执行此操作。

可以使用global.asax中的以下内容
    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        if ( /*check table to see if user is allowed in*/)
        {
            HttpContext.Current.User = null;
        }
    }