Flask的超级简单JSON Web令牌

flask-easyjwt的Python项目详细描述


易拉罐

PyPIPyPI - LicenseBuild StatuscodecovDocumentation StatusPyPI - Python Version

Flask EasyJWT为创建和验证提供了一个简单的界面 JSON Web Tokens (JWTs)在Python中。它允许您定义 然后使用这些声明创建和接受令牌,而不必检查是否提供了所有必需的数据 或者是你想要的那个。在

Flask EasyJWT是一个简单的包装器,可以方便地在EasyJWT周围使用 Flask应用程序。它通过Flask的应用程序配置提供配置选项 对于在web应用程序中创建的所有令牌的公共设置。有关如何使用 EasyJWT,见{a10}。在

fromflask_easyjwtimportFlaskEasyJWTfromflaskimportFlask# Define the claims of your token.classMySuperSimpleJWT(FlaskEasyJWT):def__init__(self,key):super().__init__(key)# Define a claim `name`.self.name=None# Define the default configuration options for FlaskEasyJWT# in the configuration of your Flask app.app=Flask(__name__)app.config.from_mapping(# The default key for encoding and decoding tokens.EASYJWT_KEY='Super secret key',# Tokens will be valid for 15 minutes after creation by default.EASYJWT_TOKEN_VALIDITY=15*60)@app.route('/token/<name>')defget_token(name):""" This view returns a token with the given name as its value. """token_object=MySuperSimpleJWT()token_object.name=namereturntoken_object.create()@app.route('/verify/<token>')defverify_token(token):""" This view verifies the given token and returns the contained name. """verified_token_object=MySuperSimpleJWT.verify(token)returnverified_token_object.name

特点

  • EasyJWT集成到Flask中,以方便配置的默认选项 创建和验证jwt。在
  • 将令牌的声明定义为一个类,然后使用该类轻松创建和验证多个令牌。在
  • 不用担心字典键中的打字错误:将声明集定义为一个类,IDE就可以找到它们 你的打字错误。在
  • 多个代币可能有相同的声明,但意图不同。Flask EasyJWT会帮你处理这个的:你 可以定义一个用于帐户验证的令牌和一个用于帐户删除的令牌,两者都以帐户ID作为声明,并且 不需要担心意外删除新创建的帐户而不是验证它,只是因为 有人把代币弄混了。在
  • 支持所有注册的JWT声明:audexpiatissjtinbf,和{}。在

有关功能的完整列表,请参见the features of EasyJWT。在

系统要求和安装

Flask EasyJWT需要python3.6或更新版本。在

烧瓶EasyJWT可用on PyPI。你可以用你的最爱安装它 包管理器。在

  • 皮普:

    ^{pr2}$ 在
  • 管道:

    pipenv install flask_easyjwt
    

使用

烧瓶EasyJWT正好用作EasyJWT。因此,本节仅描述 烧瓶的特性及基本用途。有关如何使用EasyJWT的详细说明(例如, 可选声明、已注册的声明(如audiat)和sub,或验证第三方令牌),请参阅 its documentation。在

应用程序设置

不需要使用Flask应用程序初始化Flask EasyJWT。你所要做的一切(尽管这是, 严格地说,不是必需的),是为配置中的所有令牌指定一些默认设置 你的烧瓶应用。这些设置是:

Configuration KeyDescription
^{}The key that will be used for encoding and decoding all tokens. If ^{} is not specified, Flask-EasyJWT will fall back to Flask's ^{} configuration value.
^{}The validity of each token after its creation. This value can be given as a string (that is parsable to an integer), an integer, or a ^{} object. The former two are interpreted in seconds.

您可以将这些配置值指定为烧瓶应用程序中的任何其他配置值,例如, 在代码中使用映射:

fromdatetimeimporttimedeltafromflaskimportFlaskapp=Flask(__name__)app.config.update(EASYJWT_KEY='Super secret key',EASYJWT_TOKEN_VALIDITY=timedelta(minutes=7))

在本例中,所有令牌(默认情况下)将使用(不太安全)字符串Super secret key进行编码,并且 在它们被创建后的七分钟内有效(即,在对令牌调用create()方法之后) 对象)。在

当然,指定配置值的任何其他方法也可以工作(请参见 Flask's documentation)。在

令牌规范和用法

标记的指定和使用与EasyJWT完全相同:

fromflask_easyjwtimportFlaskEasyJWT# Define the claims of your token.classMySuperSimpleJWT(FlaskEasyJWT):def__init__(self,key):super().__init__(key)# Define a claim `name`.self.name=None# Assuming we are within a Flask app context. # Create a token with some values.token_object=MySuperSimpleJWT()token_object.name='Zaphod Beeblebrox'token=token_object.create()# Verify the created token.verified_token_object=MySuperSimpleJWT.verify(token)assertverified_token_object.name=='Zaphod Beeblebrox'

唯一的区别是不必将用于编码或解码令牌的密钥传递给构造函数和 verify()方法(如果不想使用在 应用程序配置)。在

另外,如果设置了配置值EASYJWT_TOKEN_VALIDITY,则令牌将 在使用create()创建此配置值后,对该配置值中指定的数量有效。如果这个 配置值未设置令牌不会过期。如果在令牌对象上显式设置过期日期 此值将始终优先(如果不是None):

importdatetimefromflask_easyjwtimportFlaskEasyJWTfromflaskimportFlask# Define the claims of your token.classMySuperSimpleJWT(FlaskEasyJWT):def__init__(self,key):super().__init__(key)# Define a claim `name`.self.name=None# Define the default configuration options for FlaskEasyJWT# in the configuration of your Flask app.app=Flask(__name__)app.config.from_mapping(EASYJWT_KEY='Super secret key',EASYJWT_TOKEN_VALIDITY=datetime.timedelta(minutes=7))# Assuming we are within a Flask app context.token_object=MySuperSimpleJWT()token_object.name='Zaphod Beeblebrox'# This token will expire in 15 minutes, even though the default token validity is set to 7 minutes.token_object.expiration_date=datetime.datetime.utcnow()+datetime.timedelta(minutes=15)

初始化令牌对象以及创建和验证令牌必须在 Flask application context如果你想的话使用配置 来自应用程序配置的值。在

致谢

flaskeasyjwt只是JoséPadilla的一个易于使用的抽象层 PyJWT library执行创建和验证令牌的实际工作 根据JWT规范。没有他的工作,烧瓶就不可能了。在

许可证

烧瓶EasyJWT是由Bastian Meyer开发的 <;bastian@bastianmeyer.eu>;并根据 MIT License。有关详细信息,请参阅随附的LICENSE文件。在

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

推荐PyPI第三方库


热门话题
java如何通过标记名检索多个标记中的元素以进行selenium自动化测试   java iText如何查找最后一行被拆分到下一页   java如何在hudson中的特定jdk上运行Findbugs和PMD?   如何确保java程序与java Environment 6兼容?   对形状进行分组,这样我就可以通过鼠标点击和java处理循环浏览它们   使用生成器映射对象时,java定义无效   maven Java:Struts2和IntelliJ供初学者使用   java子类不继承父类字段   java Android Grid View在Android版本kitkat上崩溃   java Hibernate从缓存返回错误的列表,即使预期的列表与缓存的列表不同   java SendGrid:模板和替换标记   用于普通生产者| Kafka流的java自定义分区器   安卓理解Java内部类中的作用域   无法从Android Studio中的非静态方法调用java非静态方法   比较两个XML响应的JavaXMLUnit   java使用keytool列出密钥   不使用Java客户端库将视频上传到YouTube数据API v3   java My While循环即使在满足条件时也不会结束   自动在外部存储字符串数据,以便以后在Java中使用