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

如何结合AWS Marketplace注册令牌与AWS Cognito ID令牌关联同一用户?

解决AWS Marketplace与Cognito用户关联的问题

核心思路是用你应用的唯一标识符(邮箱)作为中间纽带,把Marketplace的CustomerIdentifier和Cognito认证用户绑定起来,具体步骤和细节如下:

1. 首次用户流程:完成绑定

当用户第一次从Marketplace跳转过来(带注册令牌):

  • 先调用resolveCustomer()拿到CustomerIdentifier和产品代码,再调用getEntitlements()获取权限、过期时间这些数据
  • 不要直接退出启动Cognito UI,而是把这些Marketplace数据临时存起来:
    • 可选方案1:后端用加密Cookie或者Redis缓存存这些数据,关联一个临时会话ID
    • 可选方案2:跳转Cognito托管UI时,把加密后的CustomerIdentifier和产品代码塞进state参数里(注意state要短,必须加密,别泄露敏感信息)
  • 用户在Cognito填完邮箱密码认证后,会跳回你的应用,此时你能拿到Cognito的ID Token
  • 解码并验证ID Token的合法性,从中提取email字段(这是你应用的用户标识符)
  • 把邮箱、CustomerIdentifier、产品代码、权限信息一起写入RDS,完成两者的绑定

2. 后续用户流程:直接关联数据

当用户后续通过Cognito认证返回应用(没有Marketplace注册令牌):

  • 解码并验证Cognito ID Token,提取email字段
  • 用这个邮箱去RDS里查,直接拿到对应的CustomerIdentifier、权限和过期时间,不用再走Marketplace的resolveCustomer()流程

3. 关键细节

  • 别用CustomerIdentifier直接关联Cognito用户池:Cognito用户池的唯一用户ID是sub字段,但你的应用用邮箱做标识符,所以用邮箱做中间关联更贴合你的业务逻辑
  • ID Token解析不用调用API:后端直接解码ID Token(一定要先验证签名、过期时间、受众这些合法性),就能拿到email字段,示例解码后的结构:
    {
      "email": "user@example.com",
      "sub": "abc123-def456-ghi789",
      "exp": 1718923456
    }
    
  • 临时数据要安全:用state传数据必须加密;用缓存的话设置短过期时间(比如15分钟),避免无效数据占资源

4. 异常处理

  • 如果用户首次认证后,RDS里查不到邮箱对应的Marketplace数据,大概率是临时数据丢了,直接引导用户重新从Marketplace进入应用,重新走resolveCustomer()流程就行
  • 一定要严格验证Cognito ID Token的合法性,防止伪造令牌导致的安全问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:53:34