我有一个使用JWT进行身份验证的RESTful API。我从客户端收到的第一个呼叫是/ login呼叫,具有以下有效负载(无标头)
{
"username" : xxxx,
"password": wwww
}
服务器验证用户是否已注册,然后将签名的JWT返回给客户端,以便在下一次调用中被接收。
我想知道这是否足够安全。我不会在任何地方检查客户端是否向我发送了客户端ID /客户端密码(例如在OAuth中),因此我无法验证此调用是否来自我的webapp / apps或它是否是我不知道的外部客户端。我想知道使用JWT实现此行为是否有意义以及如何实现。
(我知道如何使用OAuth2进行此操作,但现在我不想从JWT身份验证中删除)
谢谢!
答案 0 :(得分:0)
如果我对您的理解正确,则应该创建一个与此类似的函数:
function verify(req, res, next) {
const token = req.header('x-auth-token');
if (!token) {
return res.status(401).json({
msg: 'No token, auth denied'
});
}
try {
const decoded = jwt.verify(token, config.get(YOUR_SECRET_GOES_HERE));
req.user = decoded.user;
next();
} catch (err) {
res.status(401).json({
msg: 'Token is not valid'
});
}
}
对于所有安全的API端点,您都应该这样应用它:
router.get('/anyuserinfo', verify, (req, res) => ...
就是这样。如果没有提供令牌,该函数将发送401
响应。
答案 1 :(得分:0)
我想我发现了另一个可以回答我的Stackoverflow问题: JWT (Json Web Token) Audience "aud" versus Client_Id - What's the difference?
简而言之,在发送新的JWT令牌之前,应在标头上将client_id和client_secret发送到要验证的服务器。