我想知道算法是否已在python JWT中注册,因为我的应用程序在尝试两次时会抛出错误。
我尝试在运行时注册ES256
,作为从PyJWT 0.3.0
升级到1.1.0
之后抛出的异常的解决方法:
jwt.register_algorithm(ALGO_ES256, ECAlgorithm(ECAlgorithm.SHA256))
这完美无缺。现在我必须调用脚本,然后再发生一次并得到一个Exception,我不能再注册两次。
我考虑在注册新注册值之前评估已注册的值,并发现算法包含在:
jwt.api._jwt_global_obj
如何访问该全局对象? 我想做点什么:
if ALGO_ES256 not in jwt.api._jwt_global_obj:
jwt.register_algorithm(ALGO_ES256, ECAlgorithm(ECAlgorithm.SHA256))
但它一直告诉我它找不到api
答案 0 :(得分:1)
在某些情况下,算法已经为您的密钥注册。例如。如果您安装了加密模块。
您应首先取消注册现有算法,以确保它每次都使用旧算法:
from jwt.api import _jwt_global_obj
from jwt.contrib.algorithms.py_ecdsa import ECAlgorithm
if ALGO_ES256 in _jwt_global_obj._algorithms:
jwt.unregister_algorithm(ALGO_ES256)
jwt.register_algorithm(ALGO_ES256, ECAlgorithm(ECAlgorithm.SHA256))