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

验证JWT令牌签名

太叔俊侠
2023-03-14

我目前正在使用Vapor开发Swift后端。我的iOS客户端使用新的iOS 13功能“使用Apple登录”。当用户登录时,我会得到一个身份令牌(访问令牌),这是一个由Apple签名的有效JWT令牌。这将在所有正在进行的通信中发送到服务器,以验证服务器提供的某些路由。

在服务器上,我想通过验证令牌签名来验证发送的令牌是否确实由Apple签名,并且不是由某些恶意用户专门创建的。Apple提供了一个HTTP终结点来检索公钥来完成此操作:Apple文档。

然而,我不确定我必须多久查询一次这个endpoint来从应用编程接口中检索模数和指数,并构建公钥来验证签名。查询一次并将公钥存储在服务器上就可以使用它了吗?或者在验证签名(针对每个受保护的路由)之前,我需要在中间件中查询HTTP终结点吗?

基本上我不确定模数和指数是否会不时变化。

共有1个答案

柳鸿信
2023-03-14

您可以这样做:

  • 获取一次公钥,将其存储在服务器上
  • 请求进来,尝试使用存储的公钥验证签名
  • 如果失败,再次获取公钥,存储它
  • 尝试第二次验证签名

这将允许您在必要时尽快了解更改的公钥。

 类似资料:
  • 我正在制作一个javascript客户端,它使用JWT令牌连接到Api。在服务器端没有问题,我可以创建令牌对其进行签名,然后验证签名,从而确保没有人篡改令牌。 但我如何在客户端做到这一点。我可以解码JWT令牌并查看头、负载和签名。但是如何在客户端验证签名?是否有用于此的库,如何将公钥传输到客户端? 如果我不验证签名,我怎么知道令牌没有被篡改?

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

  • SignatureException:签名长度不正确:得到256,但预期为128。我使用的是和。到目前为止,同样的配置有效--有什么想法吗?

  • 我正在使用以下示例来玩Spring Cloud OAuth2实现: https://github.com/spring-cloud-samples/authserver https://github.com/spring-cloud-samples/sso 第一个是OAuth服务器,它在对用户进行身份验证时生成JWT令牌。第二个是正在被消耗的资源。根据OAuth规范,资源将用户的身份验证转发给au

  • 各位程序员, 我目前正在努力解决Web Api 2中的微软账户JWT令牌验证问题。我已经找到了OWIN中间件。Owin.Security.Jwt)下面是我的Startup.cs配置的代码: 我在这里找到了这个片段: http://code.lawrab.com/2014/01/securing-webapi-with-live-id.html JWT令牌使用Live SDK从我的Windows应用