撤销 OAuthBearerAuthentication的访问令牌
本文关键字:访问令牌 OAuthBearerAuthentication 撤销 | 更新日期: 2023-09-27 18:36:38
我已经为Web API设置了身份验证,它与Taiseer Joudeh的博客几乎相同。
它运行良好,直到我遇到一个问题:
- 我们有用户 A 和用户 B 当前登录到系统。
- 用户 A 作为管理员,从系统中删除用户 B。
- 在令牌过期之前,用户 B 仍有权访问 Web。
我做了一些研究,他们都说撤销访问令牌非常困难(或者在OAuth中是不可能的)。我唯一能做的就是将超时设置得更短。它仍然在我的脑海中出现故障,我不喜欢访问令牌在之后(尽管有限)时间范围内仍然有效的想法。
因此,是否有更好的方法或任何建议将不胜感激。
使用refresh_token
和access_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;
}
}