如何保护OAuth2.0秘密和秘密密钥旋转

时间:2020-08-05 01:26:04

标签: oauth-2.0 jwt spring-vault

OAuth2.0使用秘密作为对称密钥,例如HMACSHA256算法使用它来生成签名。这个秘密很重要,否则任何人都可以创建“有效的” JWT令牌并呈现给服务器。例如,如果我创建一个JWT并对其进行签名,则该标志有效。只有服务器知道秘密或对称密钥。因此,我无法创建将与服务器“传递”的JWT,因为我不知道服务器的秘密。到现在为止还挺好。 现在,如果有多个服务器和多个微服务,因此可能有数十个服务器,那么所有这些服务器都需要知道相同的秘密,以便JWT在所有服务器中“通过”。这似乎是一个很大的漏洞。如果一台服务器被破坏并且秘密已知,则所有服务器都将被破坏。 另外,缓解此问题的小方法是不时旋转秘密。那怎么办? 如果我们将机密存储在文件库中,则文件库的密码将在所有服务器中。因此,即使那样也无济于事。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

最常用的RSA256用于使用非对称密钥对令牌进行签名,以便:

  • 授权服务器知道私钥
  • 任何人(包括API)都可以从授权服务器的JWKS端点下载公共密钥,并用于验证令牌

如果使用对称密钥,则API将无法验证内存中的令牌,尽管它们可以使用自省来验证令牌,例如Step 16 of my blog post