【发布时间】:2016-01-02 14:12:30
【问题描述】:
我正在使用 jwt-simple 创建一个 api 密钥。基本上它所做的是encode(secret+data) 并将其与请求一起发送。我知道服务器将decode(encode(secret+data)) 并验证它是一个有效的请求。
示例代码在jwt-simpledocumentation:
var jwt = require('jwt-simple');
var payload = { foo: 'bar' };
var secret = 'xxx';
// encode
var token = jwt.encode(payload, secret);
// decode
var decoded = jwt.decode(token, secret);
console.log(decoded); //=> { foo: 'bar' }
我的问题是:
- 如果有人知道
encode(data+key)生成的令牌,他们就不能访问 API 吗?这就是我应该使用 HTTPS over HTTP 的原因吗? - 我想我还需要在服务器上存储每个用户的秘密,因为它需要解码。如果我不正确,我应该将它存放在哪里?
- 如何发送多个 API 请求?除了为每个请求发送 API 密钥之外,还有更好的方法吗?
提前致谢。
【问题讨论】:
-
您不应该将密钥发送给任何人。您只是发送生成的令牌(您无法从中猜出密钥),然后您会取回该令牌。然后,您使用您的密钥来验证此令牌是您使用此密钥生成的并且未被篡改。此外,您需要每个发行者而不是每个用户一个密钥。
标签: node.js api express restful-authentication jwt