我正在使用 Node.js、MySQL 和 JSON Web token 来构建 API。
我的 JWT 看起来像这样:
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyb2xlcyI6WyJsb2dnZWRfaW4iLCJhZG1pbiJdLCJpZCI6NzEsImlhdCI6MTQ1OTQ0NjU5MCwiZXhwIjoxNDU5NTMyOTkwfQ.BBbdyFMztYkXlhcBjW6D5SsKxtaRiZJqiNShOroQmhk
及其声明解码为:
{"roles":["logged_in","admin"],"id":71,"iat":1459446590,"exp":1459532990}
当 API 端点收到该 JWT 时,调用 ID 为 71 的用户表以获取任何相关详细信息或使用 JWT 中的 ID 是否更安全?
理想情况下,我们会节省对 User 表的大量调用,但是会存在安全威胁吗?恶意用户在调用端点之前是否无法更改该 ID 或角色?
最佳答案
JWT 已签名。如果用户更改有效负载上的任何内容,签名验证将失败,您将知道数据已被篡改。
话虽如此,数据本身并未加密。您可以使用用户 ID,但不要添加除可能公开的信息之外的敏感信息。
有关 JWT 验证和生命周期的更多信息:
https://github.com/auth0/node-jsonwebtoken#jwtverifytoken-secretorpublickey-options-callback
关于node.js - JSON Web token (JWT) 安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36340450/