【问题标题】:How can I make sure a JWT doesn't expire on the user如何确保用户的 JWT 不会过期
【发布时间】:2020-07-17 00:08:14
【问题描述】:

所以我可以在登录时使用 flask-jwt-extended 创建一个 JWT

我将过期时间设置为 5 分钟。 所以我在我的 VueJS 应用程序中有路由,当它们被调用时(beforeeach)我调用“/api/check”以确保令牌有效。

所有其他 API 调用都是通过 axios 到后端的。

我不明白的是,由于 cookie 只是 HTTP,我无法使用 javascript 检查过期...这是否意味着我必须每 X 分钟 ping 一次后端以及每次 axios 调用以刷新 cookie然后进行实际的 API 调用?

似乎开销很大。 有很多关于具体细节的代码,但在我遇到的问题背后的实际步骤上却没有太多......理解......

谢谢

【问题讨论】:

标签: flask jwt flask-jwt-extended


【解决方案1】:

如果 cookie 即将过期,您可以让后端自动刷新 cookie,而无需在前端做任何额外的事情。像这样的东西(未经测试)

@app.after_request
def refresh_jwt_if_near_expiring(response):
    expires_time = get_raw_jwt().get('exp')
    if not expires_time:
        return response
    
    # Change the time delta based on your app and exp config. 
    target_time = datetime.datetime.utcnow() + datetime.timedelta(minutes=5)
    if (target_time > expires_time):
        access_token = create_access_token(identity=get_jwt_identity())
        set_access_cookies(response, access_token)

    return response

然后,如果用户在 X 分钟内处于非活动状态,他们将被注销,否则他们会根据需要继续获取新令牌。如果他们确实等待太久而退出,后端会返回 401,您的前端会提示他们再次登录。

【讨论】:

  • 如果我使用 CSRF,我需要发送刷新或访问 CSRF...这似乎是一张空白支票,它将对任何进入门的令牌做出反应...不检查保护...
  • 通过此设置,您不需要刷新令牌,您可以在访问令牌过期之前隐式地继续刷新访问令牌,而无需辅助令牌。对于 CSRF 保护,您绝对仍然希望进行该设置,但这与使用带有 cookie 的 flask-jwt-extended 时的正常 CSRF 保护没有什么不同。
  • 我想我还是应该让路由 JWT 受到保护……或者在创建一个新的之前检查它是否是一个有效的 JWT……
  • get_raw_jwt()get_jwt_identity() 将返回 None ,除非您访问了受保护的端点并且提供的 JWT 已经过验证且未过期。
  • 并且在一定时间之后,target_time 不会总是大于过期时间,只是总是刷新令牌?
【解决方案2】:

分解 jwt 并返回过期时间的后端服务可以解决问题。

【讨论】:

  • 所以我调用那个 eevryytime 我调用其他任何东西...所以每次调用两次?
  • 您只需要在 JWT 更改时调用它。 JWT 仍将存储在 Http Only Cookie 中,但您可以以前端可访问的方式存储过期时间。
【解决方案3】:

在我看来,您不需要路由“/api/check”来确保令牌有效。只需添加一个装饰器@jwt_required

@api.route('/api/user')
@jwt_required
def api_user():
    result = #your logic
    return jsonify(result), 200

【讨论】:

  • /api/check 用于不调用后端的 VueRoute...iit 仅是页面保护
猜你喜欢
  • 1970-01-01
  • 2021-09-23
  • 2014-12-28
  • 1970-01-01
  • 1970-01-01
  • 2013-05-07
  • 2012-07-07
  • 2016-07-29
  • 2018-08-05
相关资源
最近更新 更多