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

And*_*ujo 6 flask flask-restful pyjwt flask-jwt-extended jwt-auth

我在 Flask 应用程序中收到此错误:

curl http://0.0.0.0:8080/ -H "Authorization: Bearer TGazPL9rf3aIftplCYDTGDc8cbTd"
{
  "msg": "Not enough segments"
}
Run Code Online (Sandbox Code Playgroud)

这是一个示例:

from flask import Flask
from flask_restful import Resource, Api
from flask_jwt_extended import JWTManager, jwt_required

app = Flask(__name__)
jwt = JWTManager(app)
api = Api(app)


class HelloWorld(Resource):
    @jwt_required
    def get(self):
        return {'hello': 'world'}


api.add_resource(HelloWorld, '/')
Run Code Online (Sandbox Code Playgroud)

安慰:

 * Serving Flask app "app.py" (lazy loading)
 * Environment: development
 * Debug mode: on
 * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 890-265-009
127.0.0.1 - - [26/Apr/2020 02:02:32] "GET / HTTP/1.1" 422 -
Run Code Online (Sandbox Code Playgroud)

我不明白:怎么了?

其他库中已引发异常(site-packages/jwt/api_jws.py 中的第 183 行):

  def _load(self, jwt):
        if isinstance(jwt, text_type):
            jwt = jwt.encode('utf-8')

        if not issubclass(type(jwt), binary_type):
            raise DecodeError("Invalid token type. Token must be a {0}".format(
                binary_type))

        try:
            signing_input, crypto_segment = jwt.rsplit(b'.', 1)
            header_segment, payload_segment = signing_input.split(b'.', 1)
        except ValueError:
            raise DecodeError('Not enough segments')
Run Code Online (Sandbox Code Playgroud)

vim*_*loc 7

您尝试传入 ( TGazPL9rf3aIftplCYDTGDc8cbTd)的令牌不是有效的 JWT。一个有效的 JWT 包含三个由点分隔的段:<base64_encoded_header>.<base64_encoded_payload>.<signature>. 您可以在此处阅读更多相关信息:https : //jwt.io/introduction/