7. 刷新令牌(一种令牌 refresh tokens)
可以用来在旧的令牌过期的时候创新新的访问令牌的一种令牌(不能访问jwt_required()节点,而access token不能访问 jwt_refresh_token_required()装饰的节点)。可以设置access_token的过期时间利用refresh_token生成新的access_token。
这里 refresh token的放置位置还是默认在请求头部,文档后面的配置字段可以更改这个设置
8. 令牌刷新性(对访问令牌增加的属性freshness)
主要是在access_token的基础上增加了fresh为True,对应的可以访问fresh_jwt_requires()装饰的endpoint, 和refresh token结合使用可以提高站点的安全性。
9. 改变默认的行为
- 改变回调函数
- 主要是令牌失效的时候的信息返回问题
# 主要是处理有效但是过期的令牌在访问一个受保护的endpoint之前
# 执行
@jwt.expired_token_loader
def my_expired_token_callback(expired_token):
token_type = expired_token['type']
return jsonify({
'status': 401,
'sub_status': 42,
'msg': 'The {} token has expired'.format(token_type)
}), 401
- 动态的令牌过期时间
- 在create_refresh_token()和create_access_token()中指定expires_delta参数来设置两种令牌的过期时间。
- 短期的access_token可以用来提供web应用的访问功能,而长期的refresh token更多的会用来给编程人员提供API。
10. 配置选项
主要是用来给flask app指定相关的参数的,具体的可以查看文档页面,重点是黑名单的设置
Configuration Options: link
11. 黑名单和令牌撤销(内存数据库的使用)
可以支持开箱即用的令牌撤销操作,主要是通过token_in_blacklist_loader()装饰器来写功能,可以和数据库或者是redis结合使用,两者官方文档都有参考。
此外,该装饰器会在每次访问endpoint的时候都会调用,如果都检测的话可能会导致负载大的问题。文档推荐的是access token用expired time来失效,而refresh token用黑名单来撤销。
12. JWT放置的位置
JWT in 系列
- in cookies: 可以减少XSS攻击啥的(不懂。。。)
- in queryString:把token放到get请求的参数中去,文档本身不推荐这么搞,可能你的token就被记录了
- in json body:把jwt存放在data body中,但是这样会导致get请求没有数据体而无法访问受保护的endpoint。