python flask 令牌token原理及代码实现

这篇具有很好参考价值的文章主要介绍了python flask 令牌token原理及代码实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

令牌认证 token

觉得废话多,可以直接看代码
代码参考:http://t.csdn.cn/Sf8km

令牌token解决了什么问题

解决http请求无状态的特性,让每次请求都有状态,知道请求是哪个用户发来的

首先要知道,http请求是无状态的
也就是说,即使是同一个人发送的两次请求,服务器也是不知道是同一个人过来访问的。
所以想让服务器知道请求的用户是谁,就需要用到token令牌技术了

等于是强行在http请求里面加了一个状态

理解

古代令牌是起什么作用的呢
1.制作令牌的技术,只有皇帝才会制作,其他人无法假冒
2.令牌代表某个人,见令牌如见人

其实接口的令牌技术,跟古代令牌的概念是一样的
1.令牌token只有web服务器可以制作,其他人无法假冒
2.令牌中存储用户的信息,服务器解密token后就知道这个令牌是哪个用户的令牌

原理

1.每次登录成功后,服务器把当前的用户id加密,就生成一个令牌,返回给客户
2.客户每次带着令牌去访问,服务器检验令牌,就能拿出里面的用户id,就知道是哪个用户访问的了

需要注意的是,生成令牌的操作,是只能服务器生成并解密的,如果其他人知道你的令牌生成和解密,就可以伪造token了

问题

思考一下现在的策略,是否可以满足单点登录功能

即使同时有三个不同的人,先后登录,拿到令牌,然后去访问,服务器也是不知道的
因为令牌里面存储的信息,只有用户的id,服务器也是根据用户id去判断令牌是否有效
而且用户id,是不能改变的,一个用户id,可能关联了其他的数据

解决办法1

1.数据库新加字段,登录时间戳
2.用户每次登录,都更新一下登录时间戳
3.在加密的token里面,再加一个登录时间戳字段,记录用户当前记录的登录时间戳
4.用户发来请求,检查令牌里面的登录时间戳是否和数据库一致,如果不一致,说明有其他人登录过,返回令牌失效

解决办法2

1.数据库新加字段,token
2.用户每次登录,都生成一个uuid,记录在用户数据库的token字段(uuid不会重复)
3.在加密的token令牌里面,把用户id替换成数据库的token字段
4.用户发来请求,检查令牌里面的token字段,去数据库查找,就找到了用户,如果没有找到,说明token已经被更新了,返回令牌失效

代码

python中,有三种生成令牌的方式文章来源地址https://www.toymoban.com/news/detail-654943.html

1.pyjwt
import jwt  
  
# 生成令牌的秘钥  
secret_key = "aixlti5oa#xh8untx"  
  
# 生成令牌  
def create_token(data, key):  
    return jwt.encode(data, key, algorithm="HS256")  
  
  
# 解密令牌  
def open_token(token, key):  
    try:  
        return jwt.decode(token, key, algorithms=["HS256"])  
    except:  
        return None  
  
  
# 模拟用户登录,把用户id信息制作令牌,并返回给app  
user_info = {"user_id": 123}  
user_token = create_token(user_info, secret_key)  
print(user_token)  
  
# 用户请求,检查令牌里是否有用户id,如果没有,说明令牌是伪造的  
result = open_token(user_token, secret_key)  
print(result)
2.使用低版本的itsdangerous库
from itsdangerous import TimedSerializer as Serializer
from itsdangerous import BadSignature, SignatureExpired


def generate_token(user, operation, **kwargs):
    """生成用于邮箱验证的JWT(json web token)"""
    s = Serializer(current_app.config['SECRET_KEY'], expire_in)

    # 待签名的数据负载
    data = {'id': user.id, 'operation': operation}
    data.update(**kwargs)
    return s.dumps(data)

def validate_token(user, token, operation):
    """用于验证用户注册的token, 并完成相应的确认操作"""
    s = Serializer(current_app.config['SECRET_KEY'])

    try:
        data = s.loads(token)
    except (SignatureExpired, BadSignature):
        return False
    ... # 相关字段确认
    return True
————————————————
版权声明:本文为CSDN博主「空巢青年_rui」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43863487/article/details/123784400
3.authlib
from authlib.jose import jwt, JoseError

def generate_token(user, operation, **kwargs):
    """生成用于邮箱验证的JWT(json web token)"""
    # 签名算法
    header = {'alg': 'HS256'}
    # 用于签名的密钥
    key = current_app.config['SECRET_KEY']
    # 待签名的数据负载
    data = {'id': user.id, 'operation': operation}
    data.update(**kwargs)

    return jwt.encode(header=header, payload=data, key=key)


def validate_token(user, token, operation):
    """用于验证用户注册和用户修改密码或邮箱的token, 并完成相应的确认操作"""
    key = current_app.config['SECRET_KEY']

    try:
        data = jwt.decode(token, key)
        print(data)
    except JoseError:
        return False
    ... # 其他字段确认
    return True

到了这里,关于python flask 令牌token原理及代码实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】Python Flask token身份认证(附完整代码)

    前言 Python Flask是一个使用Python编写的轻量级Web应用框架,它可以非常方便地搭建Web应用。在Web应用中,经常需要进行身份认证,以确保只有授权用户才能访问某些资源。本文将介绍如何使用token进行身份认证,以及如何在Python Flask中实现token身份认证。 一、什么是token身份认

    2024年02月10日
    浏览(41)
  • python flask创建服务器实现文件的上传下载,已获千赞

    } 二、后端代码(python) import os from string import Template from flask import Flask, send_file,request,jsonify from flask_cors import CORS import time app = Flask( name ) absolute = os.path.dirname( file ) CORS(app) app.debug = True FOLDER = os.path.join(absolute, ‘save_file’) HOST = “localhost” PORT = 8080 UPLOAD = ‘upload’ app.config

    2024年04月22日
    浏览(46)
  • 限流算法(计数器、滑动时间窗口、漏斗、令牌)原理以及代码实现

    本文会对这4个限流算法进行详细说明,并输出实现限流算法的代码示例。 代码是按照自己的理解写的,很简单的实现了功能,还请大佬们多多交流找bug。 下面还有投票,帮忙投个票👍 什么是限流?限流 限流 就是限制流量。在高并发、高流量的场景中我们需要把限流做好,

    2023年04月17日
    浏览(44)
  • flask+Python+Vue实现前后端分离的web项目并部署至云服务器

    1 后台+算法模型 1.1 训练机器学习模型 1.2 基于Flask框架搭建后台接口 注意:前后端跨域问题,可引入CORS解决,具体如代码: 2 前端搭建 3 云服务器部署 详细设置教程可参考linux CentOS 宝塔面板安装设置教程 安装Nginx和python项目管理器,后续可在面板上操作,完成项目打包上传

    2024年02月07日
    浏览(61)
  • 深入解析域名短链接生成原理及其在Python/Flask中的实现策略:一篇全面的指南与代码示例

    为了构建一个高效且用户友好的域名短链服务,我们可以将项目精简为以下核心功能板块: 1. 用户管理 注册与登录 :允许用户创建账户并登录系统。 这部分内容可以参考另一片文章实现: 快速实现用户认证:使用Python和Flask配合PyJWT生成与解密Token的教程及示例代码 资料管

    2024年02月22日
    浏览(53)
  • 华为云云耀云服务器L实例评测|用Python的Flask框架加Nginx实现一个通用的爬虫项目

    🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。 🏆数年电商行业从业经验, AWS/阿里云资深使用用户 ,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论⭐收藏 随着云计算时代

    2024年02月08日
    浏览(53)
  • python自带静态web服务器搭建代码实现(一)

    一、静态web服务器 静态web法服务器: 可为发出请求的浏览器提供静态文档的程序,平时上网浏览的页面都是动态的,而开发的是静态的,页面数据不会发生变化 搭建python自带的静态web服务器 命令: python3 -m http.server 端口号 -m: 表示运行包里面的模块,执行该命令需进入指

    2024年02月03日
    浏览(50)
  • 使用IIS服务器部署Flask python Web项目

    参考文章 参考文章 将Flask应用程序部署到IIS服务器上需要一些步骤,因为IIS是为.NET应用程序设计的。要将Flask Python Web项目部署到IIS服务器,您需要使用一个称为\\\"FastCGI\\\"的桥接工具来连接IIS和Python应用程序。以下是将Flask应用程序部署到IIS服务器的一般步骤: 安装IIS和FastCG

    2024年04月16日
    浏览(52)
  • ROS-参数服务器(python)方向的基本实现流程及代码演示

    首先是创造工作空间等等这里就不再赘述,下文使用的工作空间叫 ilove02_01_ws;功能包名字叫做:ilovezero2。 参数服务器的一套简单流程就是围绕:增删改查;这四个字组成的。 其中由增改这两个字组成一个主体文件,后面就叫它为 set文件。实行查与删功能的文件后面我就分

    2024年01月21日
    浏览(43)
  • SpringSecurity学习(八)OAuth2.0、授权服务器、资源服务器、JWT令牌的使用

    OAuth2是一个认证协议,SpringSecurity对OAuth2协议提供了响应的支持,开发者可以非常方便的使用OAuth2协议。 简介 四种授权模式 Spring Security OAuth2 GitHub授权登录 授权服务器与资源服务器 使用JWT OAuth是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密资源

    2024年02月02日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包