Flask JWT:用于标记用户身份、验证 API 用户身份
利用 Flask JWT 标记您的会员或用户的身份并使用它进行身份验证。用于数据交换和用户体验
在本章中,我将讨论如何利用 Flask JWT 标记您的会员或用户的身份并使用它进行身份验证。这是一种非常常见且有用的数据交换和用户体验增强方式。它适用于任何领域,例如数字营销、电子商务、SaaS、媒体和数据业务。
目录:使用 Flask JWT 标记用户身份
为什么您的 API 需要 Token 身份验证
作为开发人员或数字库存销售商,确保用户身份验证无缝运行是确保业务或应用程序安全的最重要的日常任务之一。此外,数据库存卖家不希望看到任何人可以无限制或在跟踪系统下访问 API。这就是为什么我们从安全和业务角度需要 API 令牌身份验证的原因。
同时,为了用户体验,您希望您的 API 用户只需在 API 端点中添加令牌即可登录其 API 帐户。或者通过 API 令牌,他们能够访问相关的解析数据,将其与应用程序连接起来,并享受个性化的用户体验。这是一种无缝、快速且安全的方式。
总而言之,无论您从事哪个行业,对用户身份进行标记在数据交换和通信中都是至关重要、有用且高效的。特别是,我们正在步入无 cookie 和更大的围墙花园时代。
什么是 Flask JWT
在详细阐述 JWT 之前,首先我们需要了解什么是 Flask。本质上,Flask 是一个基于 Python 的微框架,用于构建 REST API。 Flask 框架的核心思想是保持简单但可扩展。它允许开发人员根据偏好添加数据库集成、身份验证、会话管理和所有其他后端系统的自定义扩展。
之前我谈到了 Flask 来构建 Shopify 机器人应用程序。如果您有兴趣,请看看这篇文章。
https://www.easy2digital.com/automation/data/python-tutorial-26-create-a-shopify-bot-web-application-using-flask-and-heroku/
JSON Web 令牌 (JWT) 是一种借助 JSON 对象在两方之间传输数据的安全且紧凑的方式。因此,本质上,如果您的应用程序是使用 Flask 构建的,JWT 是您构建 token_required API 或用户访问的流行选择。
JSON 使用两种不同的结构类型来传输数据。一种是序列化的。当您通过每个请求和响应将信息传输到网络时,将使用此类型。它包含有效负载、标头和签名。
另一个是反序列化的。当您向令牌读取/写入信息时使用此类型。它包含有效负载和标头。
我之前尝试将它与 YAML 进行比较,如果您想探索更多,请查看这篇文章。
代币化路线图
如前所述,JWT 第一个最初目的是用于用户身份验证。因此,整个一代路线图基本上分为三个主要步骤。
- 在使用sqlalchemy构建的用户数据库中创建token列
- 从用户注册操作中编码新的注册用户令牌
- 构建一个 token_required 函数,该函数可以应用于任何需要您想要的用户身份验证的 Flask 路由
令牌列、编码和解码
我会以 sqlalchemy 为例。首先,我们需要添加一列来存储每个用户拥有的唯一令牌。对于命名,我们可以设置“token”。但这取决于您的喜好。有关 Flask 数据库的更多详细信息,我将发布另一篇文章。
第 2 步是在新用户注册路径中添加 JWT 编码方法。这是因为我们希望在新用户完成注册时为他们分配一个唯一的 API 令牌。这里我只选择我们发送给用户进行注册的邀请码作为令牌编码参考。您可以使用另一个参考点,也可以通过使用多个参考点使其变得更复杂。
最后但并非最不重要的一点是,我们使用数据库用户类方法将新令牌添加到新用户。这对她或他来说是独一无二的。
需要令牌 – 包装和解码
现在已经准备好构建需要令牌的函数了。我们需要这个,因为我们需要将它分配给任何需要用户身份验证的路由。目的与login_required 一样。
在此函数中,关键部分是对令牌进行解码并查看该值是否与之前新注册时创建的值匹配。
在进入解码部分之前,我们需要导入一个 functools 并包装的模块。
wrapps 函数是 Python functools 模块的一部分。它通过复制 _name__、__doc__、docstring 等属性来包装和更新装饰器的包装函数。
def token_required(f):
@wraps(f)
def decorate(*args, **kwargs):
您可以使用 wraps 作为装饰器来修复文档字符串和装饰函数的名称。为什么这很重要?乍一看,这听起来像是一个奇怪的边缘情况,但如果您正在编写 API 或除您之外的其他人将使用的任何代码,那么这可能很重要。原因是当你使用Python的内省来找出别人的代码时,修饰函数会返回错误的信息。
两个组成部分
首先,我们需要在 API 端点上添加一个令牌参数并为其命名,例如令牌。当人们调用 API 时,他们会在此参数中添加自己的唯一令牌,例如 www.abe.com?token=12324343
token = request.args.get('token')
然后,如果令牌丢失、无效或正确,我们可以创建一个条件。例如,为了获得正确的状态,解码后的令牌必须与用户注册时创建的 public_id 匹配。所以我们可以通过过滤掉用户public_id来查询数据库。
如果 id 与解码后的令牌不匹配,则响应消息无效。或者,如果 API 端点缺少令牌,则响应消息是缺少令牌。因此它可以确保使用该 API 的任何人都经过身份验证。
Flask JWT 的完整 Python 脚本示例
如果您对第 54 章 – 利用 Flask JWT 标记用户身份并对用户进行身份验证的完整 python 脚本感兴趣,请添加消息“第 54 章”来订阅我们的时事通讯。我们会立即将脚本发送到您的邮箱。
我希望您喜欢阅读第 54 章 – 利用 Flask JWT 标记用户身份并对用户进行身份验证。如果您这样做了,请通过执行下列操作之一来支持我们,因为这总是对我们的频道有所帮助。
- 通过 PayPal ( paypal.me/Easy2digital ) 支持并捐赠我们的频道
- 订阅我的频道并打开通知铃Easy2Digital Youtube 频道。
- 关注并喜欢我的页面Easy2Digital Facebook 页面
- 使用主题标签 #easy2digital 在您的社交网络上分享文章
- 使用 Easy2Digital 10% OFF 折扣代码购买产品 ( Easy2DigitalNewBuyers2021)
- 您订阅我们的每周通讯即可接收 Easy2Digital 最新文章、视频和折扣代码