当前位置: 首页 > 知识库问答 >
问题:

JWT令牌签名验证javascript

和飞翔
2023-03-14

我正在制作一个javascript客户端,它使用JWT令牌连接到Api。在服务器端没有问题,我可以创建令牌对其进行签名,然后验证签名,从而确保没有人篡改令牌。

但我如何在客户端做到这一点。我可以解码JWT令牌并查看头、负载和签名。但是如何在客户端验证签名?是否有用于此的库,如何将公钥传输到客户端?

如果我不验证签名,我怎么知道令牌没有被篡改?

共有3个答案

陈博容
2023-03-14

这种类型的变通意见是我不信任他人编写的“库”的原因。

JWT公司。io报告称,许多广泛可用的库都存在安全漏洞。

RFC 7519明确规定应用程序必须验证令牌签名,如果其签名无效,您必须丢弃它。

萧奇
2023-03-14

您通常不会在客户端进行验证,也不会将重要数据存储在令牌上。每个控件和权限都在后端检查。这意味着即使用户篡改了其令牌,他也无法通过后端控制,只能在前面看到一个选项。

秦皓君
2023-03-14

如果我没有在客户端验证签名,如何确保令牌确实来自服务器。?也许中间有人在换代币

签名验证无法避免中间人攻击。攻击者甚至可以使用有效的令牌嗅探通道以捕获凭据或更改消息

使用SSL/TLS通道(https)

如果我不验证签名,我怎么知道令牌没有被篡改?

由TLS受信任的服务器提供的令牌可能是有效的。(它可能已在本地存储中被更改)。您可以验证签名。此操作通常在服务器端完成(请参阅@sakuto回答),但您可以在浏览器中完美地完成

但是如何在客户端验证签名?

这些是步骤

  1. 从受信任的服务器html" target="_blank">下载公钥
  2. 从JWT中提取签名并解码(base64url)
  3. 使用加密库验证数字签名

我建议使用Webcrypto。请参阅此处的RSA导入密钥验证示例:https://github.com/diafygi/webcrypto-examples/blob/master/README.md#rsassa-pkcs1-v1_5

 类似资料:
  • 我目前正在使用Vapor开发Swift后端。我的iOS客户端使用新的iOS 13功能“使用Apple登录”。当用户登录时,我会得到一个身份令牌(访问令牌),这是一个由Apple签名的有效JWT令牌。这将在所有正在进行的通信中发送到服务器,以验证服务器提供的某些路由。 在服务器上,我想通过验证令牌签名来验证发送的令牌是否确实由Apple签名,并且不是由某些恶意用户专门创建的。Apple提供了一个HT

  • 使用库"firebase_id_token"验证ruby on rails中的Firebase id令牌。 一旦我用google_sign_in库从前端获得有效令牌并发送到后端,它总是提示“JWT::VerificationError(签名验证引发)”。尽管我已经检查了jwt.io,在那里我可以看到有效载荷和报头的信息,但无法验证签名。 firebase_id_token.rb 另外,我检查了密钥

  • 因为node-forge(一个非常方便的加密工具)还不支持“ECDSA with SHA256”(链接),我找不到其他替代品。我转向OpenSSL。经过一些调查,签名似乎是以“CMS签名数据”格式打包的。所以我发现openssl手册中的这个命令应该可以完成以下任务: openssl cms-verify-informed DER-in signature.DER-content content.t

  • 问题内容: 我正在努力验证Azure AD令牌签名。 当我在下面的“ jwks_uri”字段中查找正确的键描述时 https://login.microsoftonline.com/common/.well-known/openid- configuration 我检查所属密钥数据。 我尝试使用“ n”-模数和“ e”字段生成用于签名验证的公钥,但最终出现错误: 安慰: 我尝试了另一种使用“ x5

  • 在任何给定的POD中,服务帐户令牌被挂载在位置。 /var/run/secrets/kubernetes.io/serviceaccount/token 我想了解这个令牌是如何签名的。Kubernetes在签名此令牌时使用什么密钥?如何访问有助于脱机签名验证的公钥 /var/run/secrets/kubernetes.io/serviceaccount/ca.crt-我尝试使用与此证书关联的公钥