API 使用 json 网络令牌的身份验证 jwt-simple
API authentication using json web tokens jwt-simple
我正在使用 jwt-simple 创建一个 api 密钥。基本上它所做的是 encode(secret+data)
并将其与请求一起发送。我知道服务器将 decode(encode(secret+data))
并验证它是一个有效的请求。
jwt-simple
documentation:
中的示例代码
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 吗?这就是我应该在 HTTP 上使用 HTTPS 的原因吗?
- 我想我也需要在服务器上存储每个用户的秘密,因为它需要解码。如果我不正确应该存放在哪里?
- 如何发送多个 API 请求?除了为每个请求发送 API 密钥之外,还有更好的方法吗?
提前致谢。
看到这个post关于你对这个秘密的困惑:
关于您的问题:
是的,任何设法获得有效令牌的人都可以访问您的 API。因此,如果有人知道您用于签署令牌的密钥并且可以创建有效负载,则他可以使用 API。但通常的流程是:用户登录,你检查密码,如果密码正确,你给他一个有效的令牌。如果有人从该用户的计算机上获取了该令牌,您将无能为力。但是你可以让令牌过期,这样如果有人偷了一个令牌,它就不会在很长时间内有效。
您可以使用相同的应用程序范围内的秘密对您的令牌进行签名,但您会使用一些独特的用户特定负载,以便每个用户获得不同的令牌。
在一个简单的解决方案中,您只需在每次调用 API 时发送令牌(登录和注册除外)。还有其他建立会话的解决方案,但我认为它们实施起来有点困难。
我正在使用 jwt-simple 创建一个 api 密钥。基本上它所做的是 encode(secret+data)
并将其与请求一起发送。我知道服务器将 decode(encode(secret+data))
并验证它是一个有效的请求。
jwt-simple
documentation:
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 吗?这就是我应该在 HTTP 上使用 HTTPS 的原因吗? - 我想我也需要在服务器上存储每个用户的秘密,因为它需要解码。如果我不正确应该存放在哪里?
- 如何发送多个 API 请求?除了为每个请求发送 API 密钥之外,还有更好的方法吗?
提前致谢。
看到这个post关于你对这个秘密的困惑:
关于您的问题:
是的,任何设法获得有效令牌的人都可以访问您的 API。因此,如果有人知道您用于签署令牌的密钥并且可以创建有效负载,则他可以使用 API。但通常的流程是:用户登录,你检查密码,如果密码正确,你给他一个有效的令牌。如果有人从该用户的计算机上获取了该令牌,您将无能为力。但是你可以让令牌过期,这样如果有人偷了一个令牌,它就不会在很长时间内有效。
您可以使用相同的应用程序范围内的秘密对您的令牌进行签名,但您会使用一些独特的用户特定负载,以便每个用户获得不同的令牌。
在一个简单的解决方案中,您只需在每次调用 API 时发送令牌(登录和注册除外)。还有其他建立会话的解决方案,但我认为它们实施起来有点困难。