托肯黑瓶延伸

flask-blacklist的Python项目详细描述


烧瓶黑名单

什么

这是一个烧瓶扩展,设计用于flask_sqlalchemyflask_pratorian黑名单令牌!

它将黑名单jwt的jti值存储在内存存储中,允许在没有 数据库调用。但是,当令牌被列入黑名单时,它也会被持久化到数据库中。

为什么

  • 在不使用redis的情况下模拟redis存储!_
    • 这几乎肯定比redis慢(毕竟是python)。
  • 为什么不呢,这是一个更好地了解flask和相关库的借口。

如何

正在使用virtualenv,对吧?

pip install flask-blacklist

然后在app factory函数中,在初始化orm之后初始化Blacklist

# In global scope
from flask_blacklist import Blacklist, is_blacklisted
db = SQLAlchemy()
guard = Praetorian()
bl = Blacklist()

# In the app factory function
app = Flask(__name__)
db.init_app(app)

from app.models import Token, User
bl.init_app(app, Token) # Initialize after your ORM

# is_blacklisted is a helper function that Praetorian uses to determine if a token has been blacklisted
guard.init_app(app, User, is_blacklisted)  

令牌数据库模型需要有两种不同的类方法:

  • Token.blacklist_jti
    • 接受一个参数,即从jwt中提取的jti字符串
    • 此方法调用将黑名单中的jti字符串持久化到数据库。
  • Token.get_blacklisted
    • 应返回数据库中已列入黑名单的令牌列表
    • 令牌返回应该有一个jti属性,该属性包含从要黑名单的令牌中提取的字符串

然后,在需要使令牌失效的路由中:

@auth_blueprint.route("/v1/auth/token", methods=["DELETE"])
@auth_required
def invalidate_token():
    token = guard.read_token_from_header()
    jti = guard.extract_jwt_token(token)["jti"]
    bl.blacklist_jti(jti)
    rv, code = {"success": True, "message": "token invalidated"}, 200
    return jsonify(rv), code

版权所有2019 Alexander Potts,麻省理工学院许可证。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java以编程方式最小化JInternalFrame?   java使用JsonPath将不均匀列表提取为类型化对象   spring如何将java/resources文件获取到InputStream?   Java逻辑错误并不总是存在   java Firebase,更新特定字段   Java stream groupby并同时加入以进行csv导出   java安卓:如果出现任何声音,监听器将录制声音   java如何从多个文件中轮询最后修改的文件并发送到apache camel中的目标端点?   java是否返回多个比较器?   JavaBean IO:Date MMM在CAPS中不解析   当JButton从另一个类单击时,java正在更新JLabel   基类中子类的Java泛型初始化   jakarta ee Java ee制作一个以毫秒为间隔的计时器来发送数据包   json Windows Azure日期格式转换为Java日期