【问题标题】:Manually expire JWT token from server - WEB API 2从服务器手动过期 JWT 令牌 - WEB API 2
【发布时间】:2017-03-07 02:58:53
【问题描述】:

我正在使用一个 api 服务器来恢复来自移动应用程序的请求。我正在使用JWTASP.Net MVC Web API 2。在此管理员中,移动应用程序用户可以访问各个部门。我在登录时将这些 DeptId 设置为 Claims。在来自应用程序的每个授权请求中,我在自定义操作过滤器属性中读取声明以将请求 URL 中的 deptId 与声明相匹配。这一切都很好。

现在我的问题是,当管理员撤销应用用户对任何特定部门的访问权限时,我应该如何使该用户的 access_token 过期,以便在登录请求调用时,我可以设置新的 Claims。否则,由于管理员从服务器中删除了访问权限,但用户的 Claims 中仍然存在 deptId,因此用户仍然可以访问该部门。

一种方法是在每个请求上检查数据库以进行访问,但这会增加服务器的开销,也会增加响应时间。所以我不想走这条路。

我没有在网上找到任何关于如何使JWT 中的令牌过期的内容。有人可以帮忙吗?

【问题讨论】:

    标签: asp.net-web-api2 jwt


    【解决方案1】:

    AuthenticationAuthorization 是不同的东西。

    使用 JWT 进行身份验证,但不用于授权。我的意思是使用 JWT,您可以知道用户是谁,但不要将有关用户可以做什么的信息放入 JWT。根据您从 JWT 获得的用户身份检查服务器端用户的权限。您也可以在 JWT 中添加一些额外限制访问权限的信息(即列入黑名单;例如,社交网站为游戏创建访问令牌以访问我的身份和朋友列表,但不能访问我的帖子),但不要放在那里的信息直接提供对某些功能的访问(即白名单)。通过这种方式,您可以轻松地移除对服务器端某些功能的访问权限,尽管用户已经使用 JWT 登录。

    【讨论】:

      【解决方案2】:

      我了解您对撤销使令牌感兴趣,而不是过期它们。

      撤销或无效令牌

      很遗憾,无法实现 无需在某处跟踪令牌:

      • 颁发令牌并将其添加到白名单以跟踪它。

      • 验证令牌时,检查白名单,如果未列入白名单,则拒绝请求。

      • 要撤销或使令牌无效,请将其从白名单中删除。

      此安全架构需要一些权衡。 处理它。

      性能考虑

      关于您的性能问题:请记住 premature optimization is the root of all evil。在您遇到性能问题并且您已经证明性能问题来自您存储令牌的方式之前,您不应该进行优化。

      例如,您可以开始将令牌存储在数据库中,然后考虑在内存中缓存。但在解决您目前没有的问题时,请务必小心。

      令牌标识符

      jti 声明应用于将令牌标识符存储在令牌上。验证令牌时,请根据您在服务器端拥有的令牌标识符检查 jti 声明的值,以确保其有效。

      对于令牌标识符,您可以使用UUID

      【讨论】:

        【解决方案3】:

        JWT 令牌恰好是一种允许其自包含的令牌,即无需咨询外部实体即可对其进行验证。

        这也意味着没有外部实体会告诉您令牌已被撤销或过期。过期只能由 JWT 本身的某些属性发生; exp 声明是为此目的而标准化的:它将告诉接收者在多长时间之后,其中的信息必须不再认为有效

        【讨论】:

          猜你喜欢
          • 2020-06-13
          • 1970-01-01
          • 1970-01-01
          • 2015-01-02
          • 2017-08-20
          • 2021-05-03
          • 2021-03-03
          • 2019-05-01
          • 1970-01-01
          相关资源
          最近更新 更多