• python3 Flask jwt 简易token认证实例


     直接上代码

    1. from flask import Flask, jsonify, request, make_response
    2. import jwt
    3. import datetime
    4. from functools import wraps
    5. app = Flask(__name__)
    6. # 这是一个示例密钥,实际应用中应该使用一个复杂且随机的密钥
    7. app.config['SECRET_KEY'] = 'your_secret_key'
    8. def token_required(f):
    9. @wraps(f)
    10. def decorated(*args, **kwargs):
    11. token = None
    12. if 'Authorization' in request.headers:
    13. auth_header = request.headers['Authorization']
    14. if auth_header.startswith('Bearer '):
    15. token = auth_header.split(" ")[1] # 分割"Bearer "和token
    16. if not token:
    17. return jsonify({'message': 'Token is missing!'}), 403
    18. try:
    19. data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=["HS256"])
    20. except:
    21. return jsonify({'message': 'Token is invalid!'}), 403
    22. return f(*args, **kwargs)
    23. return decorated
    24. @app.route('/unprotected')
    25. def unprotected():
    26. return jsonify({'message': 'Anyone can view this!'})
    27. @app.route('/protected')
    28. @token_required
    29. def protected():
    30. return jsonify({'message': 'This is only available for people with valid tokens.'})
    31. @app.route('/login')
    32. def login():
    33. auth = request.authorization
    34. if auth and auth.password == 'password':
    35. token = jwt.encode({
    36. 'user': auth.username,
    37. 'exp': datetime.datetime.utcnow() + datetime.timedelta(minutes=30)
    38. }, app.config['SECRET_KEY'])
    39. return jsonify({'token': token})
    40. return make_response('Could not verify!', 401, {'WWW-Authenticate': 'Basic realm="Login Required"'})
    41. if __name__ == '__main__':
    42. app.run(debug=True)

    测试,登录,获取token

    1. curl -u username:password http://127.0.0.1:5000/login
    2. 返回
    3. {
    4. "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoidXNlcm5hbWUwIiwiZXhwIjoxNzA4MzkyNjg5fQ.0Xq-GFufOTnLSkdqT42wVcF0QPe70z6tlxepwWzHf7Y"
    5. }

     

    用token 测试/protected

    1. curl -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyIjoidXNlcm5hbWUwIiwiZXhwIjoxNzA4MzkyNjg5fQ.0Xq-GFufOTnLSkdqT42wVcF0QPe70z6tlxepwWzHf7Y" http://127.0.0.1:5000/protected
    2. 返回信息
    3. {
    4. "message": "This is only available for people with valid tokens."
    5. }

     

    chatgpt写的代码

  • 相关阅读:
    算法学习笔记(20): AC自动机
    vscode连接服务器
    防火墙Ipsec vpn的配置
    深度学习项目实战:垃圾分类系统
    DynamicProgramming 动态规划
    京东数据平台:2023年服饰行业销售数据分析
    2023年9月青少年软件编程(C 语言) 等级考试试卷(七级)
    互联网摸鱼日报(2022-11-01)
    数据分析是大数据最热门的投资赛道
    还在为学不会JVM&G1烦恼吗?看阿里P8源码分析笔记,你想要的都有
  • 原文地址:https://blog.csdn.net/jxyk2007/article/details/136182194