python3 Flask jwt 简易token认证实例

 直接上代码

from flask import Flask, jsonify, request, make_response
import jwt
import datetime
from functools import wraps

app = Flask(__name__)

# 这是一个示例密钥,实际应用中应该使用一个复杂且随机的密钥
app.config['SECRET_KEY'] = 'your_secret_key'

def token_required(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        token = None
        if 'Authorization' in request.headers:
            auth_header = request.headers['Authorization']
            if auth_header.startswith('Bearer '):
                token = auth_header.split(" ")[1]  # 分割"Bearer "和token

        if not token:
            return jsonify({'message': 'Token is missing!'}), 403

        try:
            data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])
        except:
            return jsonify({'message': 'Token is invalid!'}), 403

        return f(*args, **kwargs)
    return decorated

@app.route('/unprotected')
def unprotected():
    return jsonify({'message': 'Anyone can view this!'})

@app.route('/protected')
@token_required
def protected():
    return jsonify({'message': 'This is only available for people with valid tokens.'})

@app.route('/login')
def login():
    auth = request.authorization
    if auth and auth.password == 'password':
        token = jwt.encode({
            'user': auth.username,
            'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
        }, app.config['SECRET_KEY'])

        return jsonify({'token': token})

    return make_response('Could not verify!', 401, {'WWW-Authenticate': 'Basic realm="Login Required"'})

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

测试,登录,获取token

curl -u username:password http://127.0.0.1:5000/login

返回

{
  "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoidXNlcm5hbWUwIiwiZXhwIjoxNzA4MzkyNjg5fQ.0Xq-GFufOTnLSkdqT42wVcF0QPe70z6tlxepwWzHf7Y"
}

 

用token 测试/protected

curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoidXNlcm5hbWUwIiwiZXhwIjoxNzA4MzkyNjg5fQ.0Xq-GFufOTnLSkdqT42wVcF0QPe70z6tlxepwWzHf7Y" http://127.0.0.1:5000/protected

返回信息

{
  "message": "This is only available for people with valid tokens."
}

 

chatgpt写的代码

相关推荐

  1. Springboot集成token认证

    2024-02-21 08:18:05       11 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-21 08:18:05       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-21 08:18:05       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-21 08:18:05       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-21 08:18:05       18 阅读

热门阅读

  1. SpringBoot项目嵌入RabbitMQ

    2024-02-21 08:18:05       20 阅读
  2. 过滤器:Gateway GlobalFilter在分布式系统中的应用

    2024-02-21 08:18:05       30 阅读
  3. 给图片添加

    2024-02-21 08:18:05       24 阅读
  4. 按身高和体重排队,运动会(C 语言)

    2024-02-21 08:18:05       27 阅读
  5. 寄存器 Flip-Flop

    2024-02-21 08:18:05       20 阅读
  6. 拍立淘助力电商新趋势:以图搜图购物成主流

    2024-02-21 08:18:05       30 阅读
  7. LeetCode 56 合并区间

    2024-02-21 08:18:05       31 阅读