验证 JWT 令牌签名
Verify JWT Token Signature
我目前正在使用 Vapor 开发 Swift 后端。我的 iOS 客户端使用新的 iOS 13 功能 "Sign in with Apple"。当用户登录时,我会得到一个身份令牌(访问令牌),这是一个由 Apple 签名的有效 JWT 令牌。这会在所有正在进行的通信中发送到服务器,以验证服务器提供的某些路由。
在服务器上,我想通过验证令牌签名来验证发送的令牌确实是由 Apple 签名的,而不是由某些恶意用户专门制作的。 Apple 提供了一个 HTTP 端点来检索 public 密钥来执行此操作:Apple Documentation.
但是我不确定我必须多久查询一次此端点以从 API 检索模数和指数并构建 public 密钥以验证签名。 是否足以查询一次并将 public 密钥存储在服务器上以使用它,或者我是否需要在验证签名之前在我的中间件中查询 HTTP 端点(对于每个受保护的路由) ?
基本上我不确定模数和指数会不会不时变化
你可以这样做:
- 获取 public 密钥一次,将其存储在您的服务器上
- 请求进来,尝试使用存储的public密钥验证签名
- 如果失败,再次获取 public 密钥,存储它
- 再次尝试验证签名
这将使您在需要时尽快了解更改的 public 密钥。
我目前正在使用 Vapor 开发 Swift 后端。我的 iOS 客户端使用新的 iOS 13 功能 "Sign in with Apple"。当用户登录时,我会得到一个身份令牌(访问令牌),这是一个由 Apple 签名的有效 JWT 令牌。这会在所有正在进行的通信中发送到服务器,以验证服务器提供的某些路由。
在服务器上,我想通过验证令牌签名来验证发送的令牌确实是由 Apple 签名的,而不是由某些恶意用户专门制作的。 Apple 提供了一个 HTTP 端点来检索 public 密钥来执行此操作:Apple Documentation.
但是我不确定我必须多久查询一次此端点以从 API 检索模数和指数并构建 public 密钥以验证签名。 是否足以查询一次并将 public 密钥存储在服务器上以使用它,或者我是否需要在验证签名之前在我的中间件中查询 HTTP 端点(对于每个受保护的路由) ?
基本上我不确定模数和指数会不会不时变化
你可以这样做:
- 获取 public 密钥一次,将其存储在您的服务器上
- 请求进来,尝试使用存储的public密钥验证签名
- 如果失败,再次获取 public 密钥,存储它
- 再次尝试验证签名
这将使您在需要时尽快了解更改的 public 密钥。