JSON Web令牌(JWT)安全

use*_*056 1 node.js express jwt

我正在使用Node.js,MySQL和JSON Web令牌构建API。

我的JWT看起来像这样:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJsb2dnZWRfaW4iLCJhZG1pbiJdLCJpZCI6NzEsImlhdCI6MTQ1OTQ0NjU5MCwiZXhwIjoxNDU5NTMyOTkwfQ.BBbdyFMztYkXlhcBjW6D5SsKxtaRiZJqiNShOroQmhk
Run Code Online (Sandbox Code Playgroud)

及其声明解码为:

{"roles":["logged_in","admin"],"id":71,"iat":1459446590,"exp":1459532990}
Run Code Online (Sandbox Code Playgroud)

当api端点接收到该JWT时,调用ID为71的User表以获取任何相关详细信息或使用JWT中的ID是否更安全?

理想情况下,我们将保存对User表的大量调用,但是是否存在安全威胁?恶意用户不能在调用端点之前更改该ID或角色吗?

nod*_*man 5

JWT已签名。如果用户更改了有效负载上的任何内容,签名验证将失败,并且您将知道数据被篡改。

话虽如此,数据本身并未加密。您可以使用用户ID,但除了可能公开的信息外,不要添加敏感信息。

有关JWT验证和生命周期的更多信息:

https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback