AWS 认知公钥证书

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

我需要 Amazon cognito 使用的公钥证书,以便我的 Web 应用程序可以验证 cognito JWT。 是否有办法获取公钥证书,还是必须使用 cognito SDK 来实现此目的?

amazon-web-services certificate amazon-cognito public-key
4个回答
3
投票

使用 AWS CLI 中的

get-signing-certificate
方法获取 Cognito 的公共 x509 证书的内容。这是一个示例命令:

aws cognito-idp get-signing-certificate --user-pool-id ca-central-1_xxxxxxxxx

您将获得一行包含 Base64 编码的证书。用标准标记

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----
包围它。最终结果将如下所示:

-----BEGIN CERTIFICATE-----
MIICdzCCAeCgAwIBAgIGANc+Ha2wMA0GCSqGSIb3DQEBBQUAMFMxCzAJBgNVBAYT
AlVTMRMwEQYDVQQKEwpBbWF6b24uY29tMQwwCgYDVQQLEwNBV1MxITAfBgNVBAMT
GEFXUyBMaW1pdGVkLUFzc3VyYW5jZSBDQTAeFw0wOTAyMDQxNzE5MjdaFw0xMDAy
MDQxNzE5MjdaMFIxCzAJBgNVBAYTAlVTMRMwEQYDVQQKEwpBbWF6b24uY29tMRcw
FQYDVQQLEw5BV1MtRGV2ZWxvcGVyczEVMBMGA1UEAxMMNTdxNDl0c3ZwYjRtMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCpB/vsOwmT/O0td1RqzKjttSBaPjbr
dqwNe9BrOyB08fw2+Ch5oonZYXfGUrT6mkYXH5fQot9HvASrzAKHO596FdJA6DmL
ywdWe1Oggk7zFSXO1Xv+3vPrJtaYxYo3eRIp7w80PMkiOv6M0XK8ubcTouODeJbf
suDqcLnLDxwsvwIDAQABo1cwVTAOBgNVHQ8BAf8EBAMCBaAwFgYDVR0lAQH/BAww
CgYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQULGNaBphBumaKbDRK
CAi0mH8B3mowDQYJKoZIhvcNAQEFBQADgYEAuKxhkXaCLGcqDuweKtO/AEw9ZePH
wr0XqsaIK2HZboqruebXEGsojK4Ks0WzwgrEynuHJwTn760xe39rSqXWIOGrOBaX
wFpWHVjTFMKk+tSDG1lssLHyYWWdFFU4AnejRGORJYNaRHgVTKjHphc5jEhHm0BX
AEaHzTpmEXAMPLE=
-----END CERTIFICATE-----

1
投票

Cognito JWK 上没有证书链。您的 Cognito 的公共 JWK 可以在这里找到:

https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json

您可以使用诸如 https://www.npmjs.com/package/jwk-to-pem

之类的库将 JWK 解码为 PEM 公钥格式
var jwkToPem = require('jwk-to-pem');

var jwk = JWK_FROM_URL,
    pem = jwkToPem(jwk);

或者您可以使用类似 https://github.com/cisco/node-jose

进行完整验证
jose.JWK.asKey(keys[key_index])
  .then(result => jose.JWS.createVerify(result).verify)
  .then(result => JSON.parse(result.payload))

这里有解码 Cognito JWT 的详细指南 https://aws.amazon.com/premiumsupport/knowledge-center/decode-verify-cognito-json-token/,以及在 Cognito JWT 上使用

jose
的示例这里:https://github.com/awslabs/aws-support-tools/blob/master/Cognito/decode-verify-jwt/decode-verify-jwt.js


1
投票

没有直接可用的选项,但您可以在 openSSL 中进行解决方法,

  1. 生成私钥并使用可用的私钥生成证书签名请求(CSR)。两者都可以在一行中完成
openssl req -new -newkey rsa:2048 -nodes -keyout PrivateKey_FileName.key -out CSR_FileName.csr
  1. 以 .pem 格式保存 cognito 中的公钥。您可以使用在线工具将 jwk 转换为 .pem

    https://8gwifi.org/jwkconvertfunctions.jsp

  2. 使用生成的私钥对 CSR 进行自签名,并强制 CA 包含以 .pem 格式保存的自定义公钥,以创建一个证书,以替换您生成 CSR 请求时可用的任何公钥,使用以下命令。

openssl x509 -req -days 1200 -in CSR_FileName.csr -force_pubkey cognito_publicKeyFileName.pem -signkey PrivateKey_FileName.key -out export_certificate_FileName.crt
  1. Boom..您已经使用 Cognito 的公钥创建了 x509 证书

0
投票

AWS 最近也将其添加到控制台。

您可以从以下位置下载证书:

联合身份提供商登录 -> 身份提供商

enter image description here

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