2017-07-05 12 views
0

JWTを使用してバックエンドAPIの要求を認証していますが、予期しないエラーが発生します。ノード認可で認可トークンが見つかりません

const generateJwt = function(rows) { 
var expiry = new Date(); 
expiry.setDate(expiry.getDate() + 7); 

return jwt.sign({ 
    _id: 1, 
    email: rows.email, 
    name: rows.username, 
    exp: parseInt(expiry.getTime()/1000), 
}, "MY_SECRET"); // DO NOT KEEP YOUR SECRET IN THE CODE! 

};

私は上記のコードを使用してjwtを生成しており、正常に生成されています。

var jwt = require('express-jwt'); 
var auth = jwt({ 
secret: 'MY_SECRET', 
userProperty: 'payload' 
}); 

var router = express.Router(); 

router.get('/list',auth, controller.getMerchantList); 

ユーザーがログインした後、私はjwtトークンを返し、クライアントがバックエンドを呼び出したときにトークンを送信します。

$http.get('/api/merchant/list',{ 
    headers: { 
    Authorization: 'Bearer '+ authentication.getToken() 
    } 
}); 

生成されたトークン:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOjEsImVtYWlsIjoia2FzaGlmcm9zaGVuN0BnbWFpbC5jb20iLCJuYW1lIjoiQXJ5YSBTdGFyayIsImV4cCI6MTQ5OTg0NjEzOSwiaWF0IjoxNDk5MjQxMzM5fQ.-CCQwiadozSOuuIk9fil4aJh8D38NwgKYP3HpvClyKw

しかし、私はまだ401 JWTトークンを取得するには、フロントエンドでもあります。私はconsole.logで確認しました。誰かが私がこれを解決するのを助けてくれますか?

+0

です。 – jps

+0

私はトークンを追加しました:)前もって感謝しています:) –

+0

私はexpress-jwtに慣れていませんが、最近はあなたのような同様のケース(トークンは存在しますが、依然として401)、これはaud(オーディエンス)の主張に問題があることが判明しました。 ( - > https://stackoverflow.com/questions/44398177/message-authorization-has-been-denied-for-this-request-owin-middleware/44409993#44409993)あなたのトークンには、クレームがありません。多分それが問題です。 https://tools.ietf.org/html/rfc7519#section-4.1.3 – jps

答えて

0
const Jwt=require('jsonwebtoken'); 

function generateToken(rows,callback){ 
    let tokenData={ _id: 1, 
    email: rows.email, 
    name: rows.username 
    } 
    return Jwt.sign(tokenData,"YOUR-SECRET-KEY",{ expiresIn: 60 * 60 },function(err,token){ 
     if(err) callback(err); 
     else callback(null,token); 
}) 
} 

このトークンをクライアントに送信します。 クライアントからのヘッダーでトークンを受信したとき。 Jwt verifyメソッドを使用してトークンを確認する必要があります。 authミドルウェアは、ヘッダーからトークンを取り出して検証する必要があります。

function auth(req,res,callback){ 
    let token=req.headers.authorization; 
    Jwt.verify(token,"YOUR-SECRET-KEY",function(err,decodedData){ 
     if(err) 
      callback(err); // you can send your custom error too 
     else 
      callback(null,decodedData); 
     } 
    ) 

} 
関連する問題