【问题标题】:How to present AWS KMS public keys in JWKs format如何以 JWKs 格式显示 AWS KMS 公钥
【发布时间】:2022-06-24 06:39:43
【问题描述】:

在 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"
  ]
}

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

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

【问题讨论】:

    标签: amazon-web-services jwt amazon-kms jwk


    【解决方案1】:

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

    这已在另一个 stackoverflow 帖子中得到回答,link to answer

    在 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 端点提供它。

    【讨论】:

      猜你喜欢
      • 2019-11-18
      • 2021-08-07
      • 2020-03-15
      • 2019-03-07
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2023-02-22
      • 1970-01-01
      相关资源
      最近更新 更多