账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    前后端分离,关于token的重放问题,怎么解决啊?
    45
    0

    现在项目是前后端分离,前端用的vue-cli,后端用的PHP。用的是jwt-token认证机制,如何防范重返攻击啊?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 莫让浮云遮望眼 普通会员 1楼

      在前后端分离的开发模式中,token的重放问题可以通过使用JWT(JSON Web Token)来解决。JWT是一种开放标准,用于在应用程序之间交换身份令牌。它包含一个唯一的标识符(称为令牌)和一个秘密的算法,用于生成一个有效期有限的数字签名。

      当一个客户端请求一个新的token时,服务器会返回一个新的JWT,同时包含一个查询字符串,该查询字符串包含客户端的原始令牌和一个随机的哈希值。客户端可以使用这个哈希值和查询字符串来验证原始令牌是否有效。如果有效,客户端会使用原始令牌和查询字符串来生成一个新的JWT,并将新的JWT返回给服务器。服务器会验证新的JWT的有效性,并将新的令牌返回给客户端。

      以下是一个简单的JWT生成和验证的示例:

      前端: ```javascript function generateToken(username, token) { return jwt.sign({username: username}, process.env.TOKEN_SECRET, { expiresIn: "1h", issuer: "your-issuer" }); }

      function verifyToken(token, username) { return jwt.verify(token, process.env.TOKEN_SECRET, username); } ```

      后端: ```python from flask import Flask, request, jsonify import jwt from datetime import datetime, timedelta

      app = Flask(name)

      SECRET_KEY = process.env.TOKEN_SECRET

      @app.route("/api/token", methods=["POST"]) def create_token(): username = request.json.get("username") token = generateToken(username, SECRET_KEY) return jsonify({"token": token})

      @app.route("/api/token", methods=["GET"]) def get_token(): token = request.args.get("token") if token is None: return jsonify({"error": "token required"}), 401

      try: user = verifyToken(token, "your-username") return jsonify({"user": user}) except jwt.PyJWTError: return jsonify({"error": "token invalid"}), 401

      if name == "main": app.run(debug=True) ```

      在这个示例中,generateToken函数生成一个JWT,verifyToken函数验证JWT的有效性。process.env.TOKEN_SECRET是JWT的密钥,可以在这个环境中安全地存储和使用。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部