如何以 JWK 格式呈现 AWS KMS 公钥

问题描述 投票:0回答:1

在 AWS KMS 服务中创建密钥对后,我可以看到公钥如下所示:

-----BEGIN PUBLIC KEY-----
J1UJQVArKIBiUNUgvkEamuz4treK5qSCJeUD+TcN9lPEQTXrApYV+CcXnuQJql472gPGtTNbyE
-----END PUBLIC KEY-----

但是当客户端调用 jwks 端点 url 时(例如 https://my-authorization-service.com/.well-known/jwks

我希望响应看起来像任何其他常规(例如 google jwks 等)jwks 响应,如下所示:

{
  "alg": "RS256",
  "kty": "RSA",
  "use": "sig",
  "n": "vYjDQCjiQCjiQCjiQCjiQCji",
  "e": "AQAB",
  "kid": "79adDfP_ggD-fuxsFWdkd",
  "x5t": "aaaaaaabbbbbbbbcccccccc",
  "x5c": [
    "the_x5c_bla_bla"
  ]
}

此 JWKs 端点的目的是让授权者引用此端点来获取正确的 JWKs 密钥,以便验证/验证已由私钥签名的 JWT 令牌。

如何以上述 JWKs 格式呈现 KMS 公钥?还是我做错了什么?

amazon-web-services jwt amazon-kms jwk
1个回答
2
投票

原来这是将RSA公钥导出为jwk格式的问题。

这个问题在另一篇 stackoverflow 帖子中得到了回答,链接到答案

在 Javascript(NodeJS 运行时)中,您可以本地执行此操作(从 Node 15.9.0 或更高版本开始):

import { createPublicKey } from 'crypto'

const pemPublicKey = `-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG...
-----END PUBLIC KEY-----`

const publicKey = createPublicKey(pemPublicKey)
console.log(publicKey.export({ format: 'jwk' }))

所以我必须提取 KMS 公钥并导出/转换密钥,如上所示。然后最后根据需要提供密钥,并通过我的 JWKs 端点获取它。

© www.soinside.com 2019 - 2024. All rights reserved.