[Token实战]Flask JWT 登录接口

python flask 框架实现jwt用户登录 接口权限认证 案例 环境:python3.6+ 模块:flask、jwt 目的:实现用于登录并返回token令牌,用于后续的接口权限验证。 前言介绍: jwt(JSON Web Tokens),在用户认证当中常用的方式,在如今的前后端分离项目当中应用广泛,提高了后端代码的简洁和效能。 传统token和jwt区别 传统token:服务端会对登录成功的用户生成一个随机token返回,同时也会在本地保留对应的token(如在数据库中存入:token、用户名、过期时间等),当用户再次访问时,会携带之前的toke 阅读详情

在这里插入图片描述

​ 在PyJWT基础使用篇用四步实例讲清楚了签发、验签、篡改、过期的原理。但那些都是零散的代码片段,不能直接跑成一个服务。这篇把它们拼成一个完整的 Flask 登录接口:登录签发 Token、装饰器验证 Token、受保护接口取用户信息,从头到尾整个环节的实现。

准备工作

1. 安装包

​ 只需要两个包:

pip install Flask PyJWT

2. 生成密钥

​ 还需要一个密钥。JWT 的安全性全靠它。谁拿到密钥,谁就能伪造任意 Token。所以不能硬编码在代码里,要从环境变量读取:

# 启动前先生成并设置
export JWT_SECRET_KEY=$(openssl rand -hex 32)

​ 为什么是 32?openssl rand -hex 32 生成 32 字节的随机数据,展开成 64 个十六进制字符,信息量 256 bit,对 HS256 签名来说绰绰有余。

  • 这里,我使用secrets.token_hex(32)来生成SECRET_KEY:

    SECRET_KEY = "190d7fb08cbcf7c8b1096bb14ba0daea3306144a58001b97b3423d6a7dfa7103"
    

    之后也通过export将密钥写入环境变量。

    (web_env) user % export JWT_SECRET_KEY=190d7fb08cbcf7c8b1096bb14ba0daea3306144a58001b97b3423d6a7dfa7103
    (web_env) user % echo $JWT_SECRET_KEY 
    190d7fb08cbcf7c8b1096bb14ba0daea3306144a58001b97b3423d6a7dfa7103
    
  • SECRET_KEY 从环境变量读,如果没设置会直接 KeyError 崩掉,这是故意的。与其用一个默认值悄悄跑起来,不如在启动时就崩掉提醒你配置密钥。 用默认值的代码在开发阶段方便,但上线忘改就是安全事故。

    import os
    SECRET_KEY = os.environ["JWT_SECRET_KEY"]
    

一、整体结构

​ 整个应用就三块:

在这里插入图片描述

​ 登录接口负责"发通行证",装饰器负责"查通行证",业务接口只管自己的事。

1.1 登录接口 POST /login

​ 用户提交用户名和密码,服务器验证通过后签发一个 JWT Token 返回给客户端。这是整个流程的起点,用户只需要在这一步证明"我是谁",后面的请求都不用再传密码了。

1.2 验证装饰器 @login_required

​ 每个需要登录才能访问的接口,都要先检查请求头里有没有合法的 Token。这件事每个接口都要做,但逻辑完全一样。从 Authorization 头取 Token、验签、取出用户信息,所以抽成一个装饰器,往接口上一挂就行,不用每个接口重复写。

1.3 业务接口 GET /profile

​ 挂上 @login_required 之后,这个接口就自动受保护了。它本身只关心业务逻辑,从 request.user 取用户信息、拼响应返回。验签的事装饰器已经做完了,到这一步的请求一定是合法的。

​ 三块之间是单向依赖的:业务接口依赖装饰器,装饰器依赖登录接口签发的 Token,但它们彼此不知道对方的实现细节。以后要加新的受保护接口,只要挂上 @login_required,一行搞定;要换验签逻辑(比如从 HS256 换成 RS256),只改装饰器,所有接口自动生效。

二、模拟数据

​ 使用用字典模拟数据库,真实项目里这里会换成数据库查询,密码也不会存明文(会用 bcrypt 之类的库做哈希),但那是认证系统的话题,不是 JWT 的,这里只聚焦 Token 的签发和验证。

USERS = {
    "zhangsan": {"password": "123456", "user_id": 1, "role": "user"},
    "admin": {"password": "admin888", "user_id": 2, "role": "admin"},
}

三、登录接口

​ 这个接口是整个流程的入口。用户提交用户名和密码,服务器要做两件事:验证身份和签发通行证。
在这里插入图片描述

​ 简单说,分为四步:取参数 → 查用户比密码(不对就 401 打回)→ 签发 Token → 返回给客户端。密码错误在第二步就被拦掉了,后面的步骤不会执行。

3.1 过程分析

(1) 从请求体中取出用户名和密码

​ 客户端发过来的是 JSON 格式的请求体({"username": "zhangsan", "password": "123456"}),Flask 的 request.json 会自动解析成 Python 字典,直接用 .get() 取值就行。

(2) 拿用户名去查用户,比对密码

​ 在 USERS 字典里查有没有这个用户,有的话再比密码。如果用户不存在或者密码不对,直接返回 401(HTTP 状态码,表示"未授权")。

(3) 签发Token

​ 密码对了,用 jwt.encode() 签发 Token。 把用户信息(user_id、username、role)和过期时间打包成 Payload,用密钥签名生成 JWT。

(4) 返回Token给客户端

​ 客户端拿到Token后保存起来(通常存在 localStorage 或内存里),后续请求带上它就不用再传密码了。

3.2 实现

​ 理解了上述流程,代码就是将这四步翻译成 Python。

@app.route("/login", methods=["POST"])
def login():
    # 第一步:取用户名密码
    username = request.json.get("username")
    password = request.json.get("password")

    # 第二步:查用户、比密码
    user = USERS.get(username)
    if not user or user["password"] != password:
        return jsonify({"error": "用户名或密码错误"}), 401

    # 第三步:签发 Token
    token = jwt.encode(
        {
            "user_id": user["user_id"],
            "username": username,
            "role": user["role"],
            "exp": datetime.now(timezone.utc) + timedelta(hours=2),
        },
        SECRET_KEY,
        algorithm="HS256",
    )

    # 第四步:返回 Token
    return jsonify({"token": token})
  • @app.route("/login", methods=["POST"])

    告诉 Flask,当客户端向 /login 发送 POST 请求时,调用下面这个函数处理。为什么用 POST 不用 GET?因为登录要提交密码,GET 请求的参数会出现在 URL 里(/login?password=123456),浏览器历史记录、服务器日志都能看到。POST 把数据放在请求体里,不会暴露在 URL 中。

  • exp 过期时间 设成 datetime.now(timezone.utc) + timedelta(hours=2),意思是"当前 UTC 时间往后加 2 小时"。PyJWT 收到 datetime 对象后会自动转成 Unix 时间戳写进 Token。验签时如果发现当前时间超过了 exp,就抛 ExpiredSignatureError,这里不需要你自己写时间判断逻辑。

  • return jsonify({"error": "..."}), 401 这种写法是 Flask 的惯用语法。jsonify 把字典变成 JSON 响应,后面的 401 是 HTTP 状态码。逗号分隔的两个值,Flask 会自动组装成完整的 HTTP 响应。

四、验证装饰器:把"查 Token"抽出来

​ 每个需要登录的接口都要做同一件事:从请求头取 Token → 验签 → 取出用户信息。这段逻辑在每个受保护接口里都一模一样,如果每个接口都写一遍,代码会重复得很难看。Python 的装饰器(decorator)就是解决这种问题的,把通用逻辑写成一个函数,往接口上一挂就行。

​ 如果你不熟悉装饰器语法也没关系,这里只需要知道一件事:@login_required 加在接口函数上面,意思是"先跑 login_required 里的逻辑,通过了再跑接口本身"。

def login_required(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        auth_header = request.headers.get("Authorization", "")
        if not auth_header.startswith("Bearer "):
            return jsonify({"error": "缺少 Token"}), 401

        token = auth_header.split(" ")[1]

        try:
            data = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
        except jwt.ExpiredSignatureError:
            return jsonify({"error": "Token 已过期"}), 401
        except jwt.InvalidTokenError:
            return jsonify({"error": "无效的 Token"}), 401

        request.user = data
        return f(*args, **kwargs)
    return decorated

4.1 入场检查

​ 前两行是"门卫检查入场券"。

auth_header = request.headers.get("Authorization", "")
if not auth_header.startswith("Bearer "):
		return jsonify({"error": "缺少 Token"}), 401

​ request.headers.get("Authorization", "") 从请求头里取 Authorization 字段。按照 HTTP 的约定,客户端应该把 Token 放在这个头里,格式是 Bearer eyJhbGciOi...。如果这个头不存在或者格式不对(不是以 Bearer 开头),直接 401 拒绝,连门都不让进。

4.2 验票过程

​ 中间的 try/except 是"验票"。

token = auth_header.split(" ")[1]

try:
		data = jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
except jwt.ExpiredSignatureError:
		return jsonify({"error": "Token 已过期"}), 401
except jwt.InvalidTokenError:
		return jsonify({"error": "无效的 Token"}), 401

​ auth_header.split(" ")[1] 用空格切割,取第二部分就是纯 Token 字符串。因为原始的Authorization 头长这样:

Bearer eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMjN9.abc123signature     

​ 用空格切割后得到两部分:

索引值说明
[0]Bearer固定前缀,表示认证方式
[1]eyJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxMjN9.abc123signature完整的JWT

​ 然后交给 jwt.decode 验签,用密钥重新算一次签名,和 Token 里的签名比对。对不上就说明 Token 是假的或者被篡改过。

4.3 通过验签

​ 最后request.user = data 是"放行并盖章"。

request.user = data
return f(*args, **kwargs)

​ 验签通过后,jwt.decode 返回的就是 Payload 里的用户信息(user_id、username、role 这些)。把它挂到 request.user 上,后面的接口函数就能直接用,不需要再解析一次 Token。return f(*args, **kwargs) 是"放行",调用被装饰的那个接口函数。

4.4 注意事项

  • @wraps(f) 不能省。 没有它,被装饰的函数会"丢掉"自己的名字。profile.__name__ 会变成 decorated 而不是 profile。Flask 用函数名做路由映射,名字重复会报错。@wraps 把原函数的名字和文档字符串保留下来。
  • algorithms=["HS256"] 必须显式传。 这是安全设计,防止攻击者在 Token 的 Header 里把算法改成 none,绕过签名验证。
  • request.user = data 把用户信息挂到请求对象上。 这样后面的接口函数可以直接通过 request.user 拿到用户信息,不需要再解析一次 Token。
  • 异常分两层捕获。 ExpiredSignatureError 是 InvalidTokenError 的子类,但单独捕获是为了返回不同的错误信息。"过期"和"无效"对客户端来说需要不同的处理逻辑(过期可以尝试刷新,无效只能重新登录)。

五、受保护接口

体现装饰器的用法

​ 前面写了一大段装饰器,现在看看用起来有多简单:

@app.route("/profile")
@login_required
def profile():
    return jsonify({
        "message": f"你好,{request.user['username']}",
        "role": request.user["role"],
    })

if __name__ == "__main__":
    app.run(debug=True)

​ 就这么几行。@login_required 往上一挂,这个接口就自动受保护了。没有 Token 的请求根本走不到 profile() 函数体里,在装饰器那一层就被 401 打回去了。

​ 函数体里直接用 request.user['username'] 取用户信息,不需要自己解析 Token。这个 request.user 是装饰器在验签成功后挂上去的,到这一步你可以放心地假设:用户身份已经确认过了,数据是可信的。

​ 这就是装饰器模式的好处,权限校验和业务逻辑彻底分开。profile 函数不知道 Token 是怎么验证的,login_required 也不关心接口要返回什么数据。以后要加新接口,比如 GET /orders、POST /settings,只要需要登录,挂上 @login_required 就行,业务代码里一行验证逻辑都不用写:

@app.route("/orders")
@login_required
def orders():
    # 直接用 request.user,不用操心验签
    return jsonify({"user": request.user["username"], "orders": [...]})

六、跑起来试试

​ 代码写完了,启动服务验证一下。

6.1 启动

​ 先设密钥环境变量,再启动 Flask:

export JWT_SECRET_KEY=190d7fb08cbcf7c8b1096bb14ba0daea3306144a58001b97b3423d6a7dfa7103
python jwt_login_app.py

6.2 登录拿 Token

curl -X POST http://localhost:5000/login \
  -H "Content-Type: application/json" \
  -d '{"username": "zhangsan", "password": "123456"}'
{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6InpoYW5nc2FuIiwicm9sZSI6InVzZXIiLCJleHAiOjE3NzQ1MTUwMDd9.747sDLBOTPLUwXkwzVdAUjl3tC-nud3LIHpgxajgXRQ"
}

6.3 带 Token 访问

curl http://localhost:5000/profile \
  -H "Authorization: Bearer eyJhbGciOi..."
{"message": "你好,zhangsan", "role": "user"}

6.4 不带 Token

curl http://localhost:5000/profile
{"error": "缺少 Token"}

6.5 错误密码

curl -X POST http://localhost:5000/login \
  -H "Content-Type: application/json" \
  -d '{"username": "zhangsan", "password": "wrong"}'
{"error": "用户名或密码错误"}

​ 每个场景都能对上预期。登录成功发 Token,带 Token 能访问,不带或错误就被拦。

七、和理论篇的对照

理论概念对应代码
服务器用密钥签名SECRET_KEY(从环境变量读取)
Header + Payload + Signaturejwt.encode() 自动构建三段
验签:重算签名并比对jwt.decode() 自动完成
Token 过期机制exp 字段 + ExpiredSignatureError
Authorization: Bearer xxx装饰器从 request.headers 取出
服务器不存状态没有 Session 表、没有 Redis,纯靠 Token

​ 整个登录系统没有任何"状态存储",不需要数据库记 Session,不需要 Redis 缓存。服务器只靠密钥就能验证每一个请求。这就是 Token 理论篇 里讲的"无状态"的代码体现。

​ 当然,无状态也有代价。Token 签出去就收不回来,不能主动踢人下线。怎么解决?下篇【Refresh Token】 会给出方案。

Flask-JWT重刷 JWT重刷 access_token如果设为一直有效,无法防止用户盗用 access_token有过期时间,如果过期了,让用户重新登录有时候感受不太好 我们需要一个为已登录用户重新刷新access_token的机制 一种方式是将过期时间配置的长一点,配置JWT ACCESS TOKEN过期时间 (默认是15分钟) # JWT ACCESS TOKEN过期时间(单位秒) JWT_ACCESS_TOK... 阅读详情

相关推荐

Flask-JWT-Extended实现用户认证与Token管理

JWT(JSON Web Token)是现代Web开发中广泛使用的无状态认证机制,通过数字签名确保传输数据的完整性和安全性。其核心原理是将用户信息编码为JSON对象,使用密钥进行签名后作为Token传输。在Python生态中,Flask-JWT-Extended扩展为Flask应用提供了完整的JWT实现方案,支持Token生成、验证、刷新等全生命周期管理。结合Werkzeug的安全哈希工具,可以构建安全的用户认证系统。典型应用场景包括前后端分离项目的用户登录、API访问控制等。通过配置Token过期时间、自

weixin_42570296的博客 223

Flask中的JWT

Flask中的JWT JWT认证 Json Web Token(JWT) JSON Web Token(JWT)是一个非常轻巧的规范。这个规范允许我们使用JWT在两个组织之间传递安全可靠的信息。 JWT是一个有着简单的统一表达形式的字符串: 头部(Header) 头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。 JSON内容要经Base64 编码生成字符串成为Head...

weixin_45439324的博客 7060

Flask 学习-26.JWT(JSON Web Token)生成Token

JSON Web Token(JWT)是一个非常轻巧的规范。jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项目。 python 中 pyjwt 是一个独立的包,flask 的插件集成了该功能可以使用 flask-jwt-extended 插件来实现。

qq_27371025的博客 1135

flask 之JWT认证实现

JWT(JSON Web Token)是一种用于身份验证和授权的开放标准。它由三部分组成,分别是头部、负载和签名。头部(Header)是一个 JSON 对象,描述了使用的算法和类型。它通常包含两个字段:算法(alg)和类型(typ)。负载(Payload)也是一个 JSON 对象,用于存储用户的相关信息。它可以包含一些预定义的字段,如过期时间(exp)、发布时间(iat)等,也可以包含一些自定义字段。签名(Signature)使用指定的算法对头部和负载进行加密,生成一段字符串。

lIujunXHU的博客 2897

Flask 使用 JWT(一)

1、注册声明 :这是一组预先定义的声明,不是强制性的,而是推荐的,它们提供了一套易于使用的、可共用的声明。这个部分需要 base64 加密后的 header 和 base64 加密后的 payload 使用 . 连接组成的字符串,然后通过 header 中声明的加密方式进行加盐 secret 组合加密,然后就构成了 jwt 的第三部分。3、私有声明:这些是为了在同意使用这些声明的当事人之间共享信息而提出的,既不是注册声明的也不是公共声明。将这三部分用 . 连接成一个完整的字符串构成了最终的 jwt。

CITYDATA 1185

citespace基本操作

聚类分析 时间线图 这些结果都是高被引文献的相关呈现结果,代表该领域的文献基础 下面可以看看该project的前沿领域 选择keywords 和term go! 调整显示方式 生成凸线图:表示 在某个研究领域或者时间段内 ,大家对某个领域或者某个词的关注度突然增高,凸显前沿方向的转变 以此来发现热点 ...

生信小博士的博客 1万+

【flask】jwt登录认证(有刷新token)

1.获取token 每次请求都会获取token,token位于客户端的header的Authorization字段,取不到返回None common/utils/middleware.py # common/utils/middleware.py from flask import request, current_app, g from utils.jwt_util import verify_jwt def get_userinfo(): # 1.获取请求头中的token信息 [登录token

冰冷的希望的博客 4228

将点云坐标转换成世界坐标的demo

将点云坐标转换成世界坐标的demo

howard789的博客 2206

【实战Flask API项目指南】之七 用JWT进行用户认证与授权

关于使用flask搭建后端api平台的JWT进行用户认证与授权,超干货!!!

苟日新,日日新,又日新!!! 5291

RandLA-Net复现SemanticKITTI和S3DIS数据集

RandLA-Net复现KITTI和室内数据集

weixin_48845174的博客 4109

LTC2990电池监控芯片I²C驱动开发与多通道同步采样实践

电池监控是嵌入式电源管理系统的核心环节,其本质依赖高精度模拟信号采集、数字转换与实时状态评估。LTC2990作为集成电压/电流/温度三合一的专用监控IC,通过真差分输入、内置基准和I²C数字接口,显著简化了SOC/SOH估算的硬件链路。其技术价值在于以单芯片替代传统ADC+运放+传感器组合,在宽压(2.7–36 V)、高共模(80 V)场景下保障工业级测量可靠性。典型应用于电动工具、车载BMS、UPS及便携式储能设备的电池健康监测子系统。本文聚焦LTC2990底层驱动实现,涵盖I²C时序约束、寄存器原子读写

weixin_42599558的博客 131

Flask+Vue-Router+JWT实现登录验证

在这里将介绍一下前端后端用到的一些方法。

zheshiyangyang的博客 1029

Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建

本文介绍Ubuntu HackRF One、GNU Radio、Gqrx相关环境搭建方法。

无线通信实验室 1万+

Python项目Flask框架实现jwt用户登录、鉴权,亲测好用

jwt(JSON Web Tokens),在用户认证当中常用的方式,在如今的前后端分离项目当中应用广泛,提高了后端代码的简洁和效能。

m0_58709145的博客 2603

硬件测试入门--环路响应(Bode)测试

环路分析的一个重要作用就是分析开关电源的稳定性。扫频测试原理主要是给开关电源电路注入一个频率变化的正弦信号,测量开关电源在频域上的特性,通过分析穿越频率、增益裕度和相位裕度来判断环路是否稳定,可以为电子工程师设计稳定的控制电路提供直观的数据。开关电源的稳定性关系到整个应用系统的可靠性,利用伯德图可以看出在不同频率下系统增益的大小和相位。通过伯德图来对开关电源的环路稳定性进行判断和分析已经成为评估开关电源可靠性必不可少的方法。

songninging的博客 1万+

将AD域服务从windows server 2008 R2 迁移到windows server 2019

添加一台windows 2019 的服务器并加入现有林的域中,并将角色升级为域控制器。然后迁移FSMO角色,使其成为PDC,然后降级旧DC,并提升域和林的功能级别。最后还要说下,Server 2008 R2我们还可以删除角色并退出当前域,这里就不做操作了。2)右键 mingling.com(我的域为mingling.com)--提升域级别功能。勾选 将域控制器添加到现有域,使用域管理员将DC2加入到现有的AD域。1)打开服务器管理器---工具---AD域和信任关系。2)运行域安装服务向导,选择下一步。

lionxam的博客 3659

企业级 Flask JWT 登录实践:Access Token 与 Refresh Token 的使用

本文介绍了企业级系统中使用JWT实现安全登录鉴权的实践方案。重点阐述了AccessToken和RefreshToken的核心概念与典型流程:AccessToken用于短期业务接口访问(15-30分钟),RefreshToken用于长期刷新(7-30天)。通过Flask代码示例展示了登录接口和Token刷新接口的实现方法,并提出了企业级优化建议,包括Token存储策略、安全防护措施等。该方案通过双Token机制平衡了系统安全性和用户体验,实现了可控的访问授权管理。

2201_75368691的博客 422

手把手完整实现STM32+NB-IoT+MQTT+ThingsCloud云平台+手机APP(Android或iOS)及微信小程序及Web app 应用

本教程以远程温湿度显示及点灯作为示例。最终效果实现本地OLED显示屏、云平台和手机APP、微信小程序和Web App可远程查看温湿度数据,并可远程控制LED灯亮灭。以此完成基于MQTT协议的NB-IoT远程发布订阅数据,以此在本教程基础上可扩展开发更多的功能。

嵌入式阿齐Archie 2万+

Flask教程(十八)flask-jwt-extended

软硬件环境windows 10 64bitanaconda3 with python 3.7pycharm 2020.1.2flask 1.1.2flask-jwt-extended 3...

9121

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

flask 实现token生成以及携带token请求接口

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考。

weixin_44591652的博客 1654

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

flask使用token认证

前言 原本使用的是session,认证,服务器会把session-id存在浏览器的cookie里面,然后在服务端会保存session-id,也看到很多flask关于session的操作,自定义保存到redis等等,但是在负载均衡的时候,就会发现,当服务器多起来之后,访问的时候其他的服务器并没有保存另一个服务器产生的session-id。当然保存到同一个数据库可以解决,但是我试了一下使用token来认证。 大概思路就是借鉴了这个视频的,可能有很多不符合规范,还请大家多多指出

m0_61143764的博客 5217

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Vben Admin v5.0与Flask后端登录对接实战:从JWT认证到权限路由

在前后端分离架构中,RESTful API与前端框架的对接是核心开发环节,涉及跨域通信、状态管理和安全认证等关键技术。其基本原理是通过HTTP协议进行数据交换,前端通过代理或配置处理跨域,后端则提供标准化的数据接口。JWT(JSON Web Token)作为一种无状态的认证机制,通过加密的Token在客户端与服务器间安全传递身份信息,是实现登录认证的主流方案,具有易于扩展和分布式友好的技术价值。这一技术组合广泛应用于管理后台、中台系统等需要精细权限控制的Web应用场景。本文聚焦于Vben Admin v5.

weixin_30847939的博客 336

jwt判断token是否过期_一文讲解JWT用户认证全流程

一、什么是JWT(what)JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,以JSON对象的形式在各方之间安全地传输信息。JWT是一个数字签名,生成的信息是可以验证并被信任的。使用密钥(使用HMAC算法)或使用RSA或ECDSA的公钥/私钥对JWT进行签名。JWT是目前最流行的跨域认证解决方案1.1 JWT令牌结构SON Web令牌以紧凑的...

weixin_39600319的博客 4840

如何用Python Flask + JWT构建企业级用户登录系统?这7步你不能错过

掌握Python Flask JWT认证的完整流程,7步构建安全的企业级用户登录系统。涵盖Token生成、权限校验、刷新机制及前后端交互,适用于Web应用与API服务。方法清晰高效,值得收藏。

AlgoFun的博客 813

flask 接口 让别人能访问_flask+jwt实战

最近忙于改版安全平台的后台系统,前版本是用Flask做的前后端不分离,它在不断的增加新功能,我一个人既写前端又写后端实在赶不上进度了。所以我跟领导讨论后决定搞前后端分离,借调前端组的人力来写前端。在和前端联调的时候,我发现从后端写session到前端时失败了,谷歌查找原因发现是跨域了,后端接口服务域名和前端的域名完全不同。 在找解决方案的时候发现一个文章[1],文章提出两个方案并解释...

weixin_42366200的博客 482

干货!flask登录注册token验证接口开发详解

今天给大家献上登录注册接口开发,是基于token验证的。咱们闲言少叙,进入正题! 首先看一下数据库模型: #pip install passlib from passlib.apps import custom_app_context as pwd_context class Shop_list(db.Model): __tablename__ = 'shop_list' ...

xp5xp6的博客 2074
上一篇: 环境变量与密钥管理:别把密码写在代码里
下一篇: curl 入门:在终端里测试 API
未收敛
博客等级 码龄11年 3304粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未收敛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值