You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@aws-sdk/client-kms解密Cognito验证码失败问题排查

Cognito自定义短信发送器解密问题分析与解决

问题原因

Cognito传递的验证码密文,是用AWS Encryption SDK而非直接调用KMS Encrypt API生成的。这类密文包含额外的元数据(比如加密上下文、数据密钥的封装信息等),而KMS的Decrypt API只能解密直接由KMS Encrypt生成的纯密文,无法识别AWS Encryption SDK添加的元数据,因此会触发InvalidCiphertextException,不管用@aws-sdk/client-kms还是AWS CLI都会出现这个问题。

解决方法

1. 优化@aws-crypto/client-node的包体积

不用换库,通过以下方式缩小Lambda包大小:

  • 使用Lambda层:把@aws-crypto相关依赖单独打包成Lambda层,函数代码只保留业务逻辑,层可以复用,还能大幅降低函数包体积。
  • 引入轻量化子包:替换完整的@aws-crypto/client-node,只引入解密所需的@aws-crypto/decrypt-node和@aws-crypto/material-management-node,这两个子包的体积远小于完整客户端。
  • 构建时树摇:用Webpack或ESBuild等工具打包函数代码,开启树摇功能,剔除未使用的代码片段。

2. 注意加密上下文的一致性(仅作补充说明)

Cognito加密验证码时会附带固定的加密上下文,解密时必须完全匹配,但由于密文格式的限制,KMS API本身无法处理AWS Encryption SDK的加密结果,所以这个方向实际不可行,还是建议优化原SDK的包体积。

内容的提问来源于stack exchange,提问作者pkozlov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 16:25:35