Flask jwt POST 数据到带有令牌的端点

Posted

技术标签:

【中文标题】Flask jwt POST 数据到带有令牌的端点【英文标题】:Flask jwt POST data to endpoint with a token 【发布时间】:2021-10-27 11:57:57 【问题描述】:

这个 Flask 端点是我尝试在 POST 上使用 jwt 令牌来解决 Insomnia 的问题:

@app.route('/', methods=['POST'])
@token_required
def json_payloader():

    try:
        some code to do stuff...

无论我尝试什么,我都会在互联网上四处寻找:


  "message": "Token is missing!"

承载认证令牌:

或将身份验证设置为 None 并且仅尝试使用令牌的标头这也会失败:

非常感谢任何提示尝试。

编辑 token_required函数

from flask import Flask, request, jsonify
import flask
from flask.helpers import make_response
import jwt
from functools import wraps

def token_required(f):
    @wraps(f)
    def decorated(*args, **kwargs):
        token = request.args.get('token')
        if not token:
            return jsonify('message': 'Token is missing!'), 403
        try:
            data = jwt.decode(token, app.config['SECRET_KEY'])
        except:
            return jsonify('message': 'Token is invalid'), 403

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

【问题讨论】:

您能否说明token_required 是从哪里导入的? 我在帖子的编辑中添加了 似乎基本问题是您正试图从 args 中检索令牌,但它在标题中:flask.palletsprojects.com/en/2.0.x/api/#flask.Request.args 【参考方案1】:

除非您使用不同版本的 flask-jwt(或 flask-jwt-extended),否则我相信正确的函数装饰器是 @jwt_required()

【讨论】:

【参考方案2】:

看来您正在使用 JWT。所以,要使用的正确装饰器是@jwt_required。 请参阅https://flask-jwt-extended.readthedocs.io/en/stable/basic_usage/#basic-usage 中的示例。

@app.route("/protected", methods=["GET"])
@jwt_required()
def protected():
    # Access the identity of the current user with get_jwt_identity
    current_user = get_jwt_identity()
    return jsonify(logged_in_as=current_user), 200

如果你想创建自己的实现,你可以像这样检索它

auth_header = request.headers.get("Bearer", "").strip().strip(",")

【讨论】:

以上是关于Flask jwt POST 数据到带有令牌的端点的主要内容,如果未能解决你的问题,请参考以下文章

发送带有承载令牌授权标头 (flask_restful + flask_jwt_extended) 的 GET 消息时出现“段不足”

尝试在 Eve Flask 框架中验证用户时出现 401

Keycloak - 通过OIDC端点检索JWT令牌

带有 API 密钥和 JWT 令牌的 Net Core API

JWT 验证客户端?

从 AngularJS POST 到 Django API 以获取 JWT 并返回 405 错误