React客户端如何经Express中间件管理JWT实现Flask路由认证?
JWT路由认证的问题与疑问
背景
我基于Flask框架,使用flask-jwt-extended库实现JWT路由认证,登录时生成JWT并以http-only Cookie形式返回,代码如下:
app.config["JWT_COOKIE_SECURE"] = False # 本地环境设为False app.config["JWT_TOKEN_LOCATION"] = ["cookies"] app.config['JWT_CSRF_IN_COOKIES'] = True .......... access_token = create_access_token(identity= token) response_data = jsonify({ 'success': True, 'message': 'You have successfully logged in', }) set_access_cookies(response_data, access_token)
之后我将该token通过http-only Cookie传递给Express中间件,中间件中获取token和CSRF token,对JWT进行解码并将CSRF token保存到Cookie,代码如下:
const setCookieHeader = response.headers['set-cookie'] const access_token_cookie = setCookieHeader[0] ....... const csrf_access_token = setCookieHeader[1] var decodes_jwt = jwt.verify(token, config.jwtSecret)
疑问
- 中间件中解码JWT的操作是否合理?
- React客户端该如何获取JWT并在后续请求中发送?
- 部分场景仅发送csrf_access_token即可完成认证、无需JWT,这种方式是否有效?
当前实现问题
我在中间件中发起请求的代码:
const axiosInstance = axios.create({ withCredentials: true, }) axiosInstance.post(`${clientUrls.cloudapi}/get_my_route`, {}, { headers: { 'Content-Type': 'application/json', // 'Authorization': `Bearer ${req.get('Authorization').split('bearer ')[1]}`, // Authorization: `Bearer ${req.cookies['csrf']}` 'X-CSRF-TOKEN': req.cookies['csrf'], } }).then((response) => {
Flask后端的认证路由代码:
@app.route("/get_my_route", methods=["POST"]) @jwt_required() def _getRoute(): current_user = get_jwt_identity() ........
当前请求返回401 Unauthorized,核心问题是:React客户端该如何管理JWT,使其能通过中间件发送至后端完成请求验证?
内容的提问来源于stack exchange,提问作者The_elevator
相关产品推荐
相关产品推荐

