web-dev-qa-db-ja.com

Json Web Token verify()return jwt malformed

const jwt = require("jsonwebtoken");
const SECRET = "superSuperSecret";

module.exports = function(req, res, next) {
    const token = req.body.token || req.query.token || req.headers[ "x-access-token" ];
    if (token) {
        return jwt.verify(token, SECRET, function(err, decoded) {
            if (err) {
                return res.json({
                    success: false,
                    message: "Failed to authenticate token.",
                });
            }
            req.user = decoded;
            return next();
        });
    }
    return res.unauthorized();
};

私はPostmanを使用してAPIをテストしています。 x-access-tokenキーと値superSuperSecretを使用してヘッダーを設定します。エラー{"name":"JsonWebTokenError","message":"jwt malformed","level":"error"}が発生しました。私はこれを使用しています https://github.com/FortechRomania/express-mongo-example-project/blob/master/src/middlewares/validateToken.js

2
Cyril F

トークンとして値を渡すことはできません。トークンを作成するには、jwt.sign()が必要です。詳細については、 [〜#〜] jwt [〜#〜] のドキュメントを参照してください。

また、

リクエストヘッダー名には、x-access-tokenではなくAuthorizationを使用してください。トークンの前にベアラーを配置します。

Authorization: Bearer TOKEN_STRING

JWTの各部分は、base64urlでエンコードされた値です。トークンは次のように取得できます。

var token = req.headers.authorization.split(' ')[1];
6
Sookie Singh

JWTはjwt malformedを返しますトークンがnullの場合、jwt.verifty関数に渡されます

トークン= null;
letpayload = jwt.verify(token、 'secretKey'); //エラー:jwtの形式が正しくありません

1
M Abdullah

私が見たところ、あなたは実際のJWTトークンではなく、代わりにシークレットを送信しています。有効なJWTトークンは、次のように、ドットで区切られた3つの部分からなる文字列で構成されます。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKx

https://jwt.io/

上記のWebサイトでわかるように、「superSuperSecret」は有効なJWTトークンではありません。

1
user3010273