如何发送和接收JWT令牌?

时间:2018-02-01 19:26:48

标签: javascript python authentication jwt

尝试验证用户的令牌。

我如何在客户端提出请求(js +反应):

axios({
        method: 'POST',
        url: '/verify', 
        headers: { authorization: sessionStorage.getItem('token') },
        data: {}
    })
        .then(function(response) {
            // ...
        });

我如何在服务器端(python)接收请求:

@app.route('/verify', methods=['POST'])
def verify_user():
    token = request.headers.get('Authorization')
    payload = jwt.decode(token, SECRET_KEY)  // error here
    // ...

为什么会出现此错误? :

Traceback (most recent call last):
........
jwt.exceptions.DecodeError: Signature verification failed

提前谢谢。

P.S。令牌正确发送

修改

发现了错误的警告:

@app.route('/login', methods=['POST'])
def get_user():
    // ...
    token = jwt.encode({'some': 'payload'}, 'secret', algorithm='HS256')
    return token // when I return the token here, it becomes slightly reduced

真实令牌:

b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U'

我返回的缩减令牌:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U

如何将生成的jwt令牌发送到客户端来修复它?

1 个答案:

答案 0 :(得分:0)

这看起来像是字符串vs字节编码问题。要解码字节字符串:

str = byte_string.decode('UTF-8')  # turns b'123' into '123'

将字符串编码为字节:

byte_string = str.encode('UTF-8')  # turns '123' into b'123'

您可能需要encode将传入的字符串转换为字节,然后再将其传递给jwt.decode(),如下所示:

jwt.decode(token.encode('UTF-8'), SECRET_KEY)

除了UTF-8之外还有其他编码,但这可能就是你所需要的。