首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用json web令牌的API身份验证

使用json web令牌的API身份验证
EN

Stack Overflow用户
提问于 2015-10-05 19:51:45
回答 1查看 4K关注 0票数 1

我使用jwt-简单地创建一个api键。基本上,它所做的是encode(secret+data),并将其与请求一起发送。我知道服务器将decode(encode(secret+data))并验证它是一个有效的请求。在jwt-simple 文档中找到的示例代码

代码语言:javascript
复制
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密钥之外,还有其他更好的方法吗?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-05 20:30:13

请看这篇关于你与秘密混淆的帖子:没有秘密密钥,任何人都能解码JSON令牌(JWT)吗?

至于你的问题:

  1. 是的,每个设法获得有效令牌的人都可以访问您的API。因此,如果有人知道您用于签名令牌的秘密密钥,并且能够创建有效的有效负载,那么他可以使用API。但是通常的流程是:用户登录,检查密码,如果密码是正确的,就给他一个有效的令牌。如果有人从那个用户的电脑上拿走了这个令牌,你就无能为力了。但是你可以让令牌过期,所以如果有人偷了它,它在很长时间内是无效的。
  2. 您可以使用相同的应用程序大机密对令牌进行签名,但是您将使用一些特定于用户的唯一有效负载,以便每个用户都能获得不同的令牌。
  3. 在一个简单的解决方案中,您只需在每次调用API时都发送令牌(除了登录和注册)。建立会议还有其他的解决办法,但我认为它们更难实施。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32956773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档