首页 文章

ASP.Net Web Api 2,json web令牌,注销并确保服务器不再需要验证令牌

提问于
浏览
5

我正在使用asp.net web api 2并使用JWT进行身份验证 . 应用程序正常工作,因为它在用户登录请求时生成令牌,然后用户可以使用该令牌进行后续请求 . 但我有一些安全问题,比如

  • 如果令牌从用户的浏览器中被盗,该怎么办?服务器如何检测从两台不同计算机发送的两个请求中的有效请求 .

  • 当用户退出时,服务器如何检测到此特定令牌现在无效/已注销 . 当我读到退出时,它只是从客户端浏览器删除令牌,因此被盗令牌仍然存在,从其他PC请求 .

  • 服务器如何在到期时间内撤销令牌?

如果我的问题不明确,请评论 .

2 回答

  • 1

    请找到以下答案:

    1)访问令牌,如现金,如果你有,那么你可以使用它,如果你有有效的访问令牌,无法确定请求是否来自授权方,这就是为什么HTTPS必须与OAuth 2.0和持票人一起使用令牌 .

    2)像JWT这样的自包含令牌不可撤销,因此没有数据库检查,这就是它的美妙之处,你需要留下这些令牌直到它们过期 . 如果您使用了引用令牌,那么您将能够撤销它们,但是这种方法的缺点是在每次API调用时都会使用DB来验证令牌 .

    3)第2部分已经回答了 .

    您可以使用以下链接查看我关于此主题的系列帖子:

    Token Based Authentication using ASP.NET Web API 2, Owin, and Identity.

    AngularJS Token Authentication using ASP.NET Web API 2.

    JSON Web Token in ASP.NET Web API 2 using Owin.

  • 3

    当谈到JWT撤销时,一般的想法似乎是:

    • 根本无法完成

    • 或它可以完成,但它违背了JWT的无国籍性质 .

    我一般不同意 . 第一个JWT只是一种令牌格式(Learn JSON Web Tokens),是的,它可以用于将某些状态从服务器转移到客户端,但这并没有对我们能够和应该做什么进行任何限制,从我们的角度考虑它们是有效的 . 应用 .

    二, if you understand the implications and the associated cost of implementing revocation functionality and you think it's worthwhile to use self-contained tokens instead of alternatives that could simplify revocation but increase the complexity elsewhere then you should go for it.

    关于无状态事物的另外一个词,我想我只能在接收和验证令牌的应用程序根本没有维持任何状态的远程机会中同意它 . 在这种情况下,引入撤销意味着引入一个之前不存在的持久存储 .

    但是,大多数应用程序已经需要保持某种持久状态,因此添加更多位来跟踪列入黑名单/无效令牌是没有问题的 . 此外,您只需跟踪该信息,直到令牌到期日期为止 .

    涵盖了一般理论,让我们回顾一下你的个人问题:

    • 如果您的安全要求要求您需要采用其他措施来尝试检测令牌的恶意使用,那么您可以自由地执行此操作 . 一个简单的例子是,如果您检测到来自非常不同的地理位置的相同令牌的使用情况,则会将令牌列入黑名单 .

    • 由于支持令牌撤销,应用程序注销场景只需要包括将相关令牌列入黑名单的步骤 .

    • 我可能在这里遗漏了一些东西,但是如果达到了令牌到期时间,那么验证JWT的常规过程就已经包含一项检查以确保令牌尚未到期 .

相关问题