【发布时间】:2020-08-23 16:48:18
【问题描述】:
我有一个由多个客户端访问的 JWT 实现。从某种意义上说,多个客户端正在向我发送 JWT 令牌,并且他们正在使用我在它们之间共享的 RSA 公钥创建 JWT 令牌。我正在使用 RSA 私钥解码 JWT 令牌。
但现在由于一些安全原因,我需要向他们发送不同的公钥并获得 JWT 令牌,然后我将使用我拥有的一个私钥对其进行解码。
简而言之,我将如何生成多个公钥和单个私钥或任何类似的方法。
【问题讨论】:
-
似乎有一些误解:1) 通常客户端不会创建 JWT。服务器(API 或身份验证服务器)可以。 2) 令牌没有用公钥签名。你总是需要私钥来签名和公钥来验证令牌。 3)解码与密钥无关。令牌可以在没有密钥的情况下进行解码,这完全是关于签名的验证。除非您在谈论加密令牌(JWE),但您没有提到这一点。目前还不清楚您真正想要实现什么以及您使用 JWT 的目的。
-
这里客户端的意思是:访问我的应用程序的前端应用程序向我提供了一个请求数据以及一些标头,我正在获取 JWT 令牌作为标头参数。
-
但是令牌的目的是什么?授权?如果它是授权(最常见的用例),那么它不是客户端任务。您是只签署令牌还是还发送加密的有效负载?
-
目的是授权。因为我们有多个前端应用程序访问我的应用程序并且我期望不同的 JWT 令牌,所以我需要找到一种通用的方法来解码 JWT 并批准授权。
-
那我只能重复一遍:API 或 Auth 服务器创建令牌,而不是客户端。客户端不需要任何密钥。服务器使用私钥签名。您需要提供一个端点,客户端可以在其中登录以获取令牌。每个客户端的令牌都不同,因为您通常在有效负载中编码不同的用户 ID/客户端 ID/受众。客户签名的令牌没有多大意义。
标签: jwt rsa public-key-encryption jwt-auth