JSON Web令牌(JWT)-验证客户端
JSON Web Tokens (JWT) - Validate Client
我一直在研究JWT,我对使用它很感兴趣。由于数字签名和有效负载内容,我喜欢它不需要在服务器上进行状态检查。
我遇到的困难是验证客户端。我知道签名允许服务器说"是的,我发布了这个令牌,它是有效的",但我不完全理解服务器如何验证客户端是它所说的那个人
数字签名在服务器端是有意义的,但客户端无法签署任何东西来验证它是谁,因为浏览器无法保密。这是我无法理解的一部分。如果浏览器不能保守秘密,它如何向令牌中添加数据(如随机数或有关其请求的资源的信息(以包括在签名中,类似于oAuth 1.0的工作方式。
是否不支持此操作?有没有其他方法可以验证浏览器是谁?如果我的客户有一个泄露代币的安全漏洞怎么办?如果客户端没有经过验证,难道没有人可以使用这些令牌吗?我认为"短到期时间"不是解决这个问题的好办法。
有人能帮我把JWT的这个部分包起来吗?
为了补充Tim B所说的内容,我使用了令牌,其中密钥上附加了浏览器和ip,如下所示:(PHP示例(
$secret_key = 'kajsdfkljk' . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT'];
然而,这似乎确实有效,如果你从一个网络跳到另一个网络,那么你每次都必须登录,在这种情况下,你可以只使用用户代理,而不是ip。
这里需要注意的另一件事是,如果发生某种泄漏,您可以随时更改密钥,在密钥中,从服务器发出的所有令牌都将不再有效。
此外,如果不使用https连接,令牌用于身份验证可能非常危险。
验证客户端没有被泄露是不可能的,因为它肯定会泄露令牌。令牌过期有助于缓解泄露的令牌在太长时间内的危险,但正如您所提到的,这并不是一个愚蠢的解决方案。您可以使用请求用户的当前IP地址作为签名密钥的一部分来帮助缓解在其他地方使用的泄漏令牌。它仍然可以通过XSS在本地使用,但不太容易被钓鱼者使用。
我的理解是,客户端不会将信息添加到令牌中,只会将其与附加信息一起传递。单独的POST变量——一个用于"验证"身份的令牌,其他变量用于定义其他参数。
- 客户端单选按钮列表验证
- 如何在不使用mvc 4中的模型的情况下进行客户端验证
- ServiceStack JavaScript服务器事件客户端的身份验证
- MVC客户端验证的某个位置缺少链接
- 从javascript客户端验证REST服务
- asp.net web表单客户端验证始终回发
- 如何在文本框中验证客户端的youtube url
- 如何验证客户端上的Javascript没有被更改
- 检查验证组是否有效,而不启动验证客户端
- Ember用户身份验证(客户端和服务器端完全分离)
- 是否不可能通过/Regex_syntax/.test(str_to_test)验证客户端输入,其中Regex_synta
- 调试不显眼的验证(客户端)
- Asp.net MVC日期时间动态验证客户端日期格式
- 尝试访问HTML5电子邮件验证客户端
- 验证客户端日期范围
- 表单验证客户端和服务器端
- 如何验证客户端中文本框值的总和
- 验证客户端AngularJS上输入的图像文件维度
- JSON Web令牌(JWT)-验证客户端
- MVC 5 - 验证客户端上的特定字段