OAuth2.0 使用秘密作为对称密钥,例如 HMACSHA256 算法用于生成签名。这个秘密很重要,否则任何人都可以创建一个“有效”的 JWT 令牌并呈现给服务器。例如,如果我创建一个 JWT 并对其进行签名,则该签名是有效的。只有服务器知道秘密或对称密钥。所以我无法创建一个将与服务器“通过”的 JWT,因为我不知道服务器的秘密。到目前为止,一切都很好。现在,如果有多个服务器和多个微服务,因此可能有几十个服务器,它们都需要知道相同的秘密,以便 JWT 在所有服务器中“通过”。这似乎是一个很大的漏洞。如果一台服务器被攻破并且秘密已知,那么所有服务器都可能被攻破。此外,缓解这种情况的小方法是不时轮换秘密。怎么可能呢?如果我们将秘密存储在保险库中,那么保险库的密码将在所有服务器中。所以即使这样也无济于事。有任何想法吗??
问问题
415 次
1 回答
1
最常见的是 RSA256 用于使用非对称密钥对令牌进行签名,以便:
- 授权服务器知道私钥
- 任何人(包括 API)都可以从授权服务器的 JWKS 端点下载公钥,并使用它来验证令牌
如果使用对称密钥,那么 API 将无法验证内存中的令牌,尽管它们可以使用自省来验证令牌,如我的博客文章的第 16 步。
于 2020-08-05T12:48:28.117 回答