创建 JWK 服务器以在 kubernetes 中提供密钥
Creating a JWK server to servex keys in kubernetes
我正在尝试在 pod(在 k8s 上)中创建一个 JWK 服务器,它会在收到对特定孩子的请求时提供密钥。我使用生成函数创建 JWK
func (s *jwkServer) startJWKServer() {
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
panic(err)
}
jwk := go_jose.JSONWebKey{
Key: privateKey,
KeyID: "rand_key_id",
Algorithm: "RSA256",
}
s.jwk = &jwk
}
func (s *jwkServer) ServeHTTP(response http.ResponseWriter, request *http.Request) {
// Do some encoding and decoding to encapsulate into the response object
return s.jwk
}
我使用上面生成的密钥对 JWT 令牌进行签名。
当请求上述密钥时,pod returns 密钥。
这里的问题是,如果在 JWK 请求进入之前 pod 重新启动,则无法找到密钥,这会导致错误。应该如何处理这种情况?
我在这里考虑了几个解决方案
解决方案 1:每次都创建相同的密钥,但如果有人可以访问该密钥,这将是一个问题。
解决方案 2:每次 pod 重新启动时都会生成一个新的 JWK 密钥,但我担心 pod 多次重新启动的情况会增加代码的延迟。
我应该如何处理 kubernetes 中的 JWK 服务器?
这是我们如何解决的
Public 密钥保存在某处(数据库或 PV 或保管库)
当请求进来并且pod还没有重启时,我们会在内存中有public键,服务器returns键
当请求进入并且 pod 重新启动时,我们不会在内存中有 public 键。但是我们仍然会在我们的持久层中拥有它,我们会从持久层提供 public 键。
我正在尝试在 pod(在 k8s 上)中创建一个 JWK 服务器,它会在收到对特定孩子的请求时提供密钥。我使用生成函数创建 JWK
func (s *jwkServer) startJWKServer() {
privateKey, err := rsa.GenerateKey(rand.Reader, 2048)
if err != nil {
panic(err)
}
jwk := go_jose.JSONWebKey{
Key: privateKey,
KeyID: "rand_key_id",
Algorithm: "RSA256",
}
s.jwk = &jwk
}
func (s *jwkServer) ServeHTTP(response http.ResponseWriter, request *http.Request) {
// Do some encoding and decoding to encapsulate into the response object
return s.jwk
}
我使用上面生成的密钥对 JWT 令牌进行签名。 当请求上述密钥时,pod returns 密钥。
这里的问题是,如果在 JWK 请求进入之前 pod 重新启动,则无法找到密钥,这会导致错误。应该如何处理这种情况?
我在这里考虑了几个解决方案
解决方案 1:每次都创建相同的密钥,但如果有人可以访问该密钥,这将是一个问题。
解决方案 2:每次 pod 重新启动时都会生成一个新的 JWK 密钥,但我担心 pod 多次重新启动的情况会增加代码的延迟。
我应该如何处理 kubernetes 中的 JWK 服务器?
这是我们如何解决的
Public 密钥保存在某处(数据库或 PV 或保管库)
当请求进来并且pod还没有重启时,我们会在内存中有public键,服务器returns键
当请求进入并且 pod 重新启动时,我们不会在内存中有 public 键。但是我们仍然会在我们的持久层中拥有它,我们会从持久层提供 public 键。