• 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写的代码

  • 相关阅读:
    【kubernetes的基本API操作】
    电子量产项目框架--基本思想
    【不三不四的脑洞】记录一次 “街头搭讪” 之对旋转链表算法的感悟
    Elasticsearch7.17 五 :ES读写原理、分片设计和性能优化
    Java泛型中的 “?super T“ 与 “?extends T“ 有何不同
    Python数据分析教程(二):Pandas
    网络编程——socket定义和地址格式
    springboot 多线程实现
    AJAX总结
    【计算机网络】计算机网络、互联网、互连网、因特网、万维网
  • 原文地址:https://blog.csdn.net/jxyk2007/article/details/136182194