撤销 OAuthBearerAuthentication的访问令牌

本文关键字:访问令牌 OAuthBearerAuthentication 撤销 | 更新日期: 2023-09-27 18:36:38

我已经为Web API设置了身份验证,它与Taiseer Joudeh的博客几乎相同。

它运行良好,直到我遇到一个问题:

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

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

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

撤销 OAuthBearerAuthentication的访问令牌

使用refresh_tokenaccess_token,因为它们的设计,并将访问令牌的生存期缩短到可接受的持续时间,并尽可能低。由于您既是资源服务器又是授权服务器,因此渐近线意味着您最终会在每次调用时检查用户,如其他答案中所建议的那样,但是:

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

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

感谢您参考和使用我的博客文章,请检查此答案,因为如果要撤销访问令牌标识符,则需要将访问令牌标识符存储在数据库中。

如果您在每个请求中根据数据库表检查用户,这是可能的。global.asax 中类似以下内容的内容将起作用。

    protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        if ( /*check table to see if user is allowed in*/)
        {
            HttpContext.Current.User = null;
        }
    }