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

如何在Amplify刷新令牌时将设备密钥传入Cognito预令牌生成Lambda函数?

在AWS Amplify令牌刷新流程中传递设备密钥至Cognito预令牌生成Lambda

1. 确保设备跟踪已启用

先确认你的Cognito用户池已开启设备跟踪功能(在用户池设置的「设备」选项卡中配置,比如选择「记住设备」或「需要验证设备」),同时Amplify Auth配置支持设备认证。你的aws-exports.js中Auth配置需包含正确的认证流程:

const awsmobile = {
  // ...其他配置
  Auth: {
    authenticationFlowType: "USER_SRP_AUTH", // 支持设备跟踪的默认流程
    // 其他Auth配置项
  }
};

Amplify会自动存储已验证设备的凭证,后续刷新令牌时会自动关联设备信息。

2. 刷新令牌时自动传递设备密钥

当Amplify自动触发令牌刷新(或调用Auth.currentSession())时,只要设备已被验证,Cognito会自动将设备密钥(deviceKey)传递给预令牌生成Lambda函数,无需在Amplify端手动额外处理。

3. 在预令牌生成Lambda中访问设备密钥

Lambda函数的事件参数直接包含设备相关信息,你可以从event.request对象中提取:

exports.handler = async (event) => {
  // 获取设备密钥
  const deviceKey = event.request.deviceKey;
  // 可选:获取设备属性
  const deviceAttributes = event.request.deviceAttributes;

  // 示例:将设备密钥添加到JWT自定义声明中
  if (deviceKey) {
    event.response.claimsOverrideDetails = {
      claimsToAddOrOverride: {
        "custom:device_key": deviceKey
      }
    };
  }

  return event;
};

注意:只有当设备处于「已验证」状态时,deviceKey才会出现在事件中。如果用户未选择记住设备,或设备未通过验证,该字段会缺失。

4. 手动处理场景(自动传递失效时)

如果遇到Amplify未自动传递设备密钥的情况,可通过Amplify请求拦截器手动添加设备信息:

import { Auth } from 'aws-amplify';

// 配置请求拦截器
Auth.configure({
  interceptors: {
    async request(interceptorOptions) {
      // 获取本地存储的设备密钥
      const device = await Auth.getDevice();
      if (device && device.deviceKey) {
        // 修改请求参数,添加设备密钥(匹配Cognito API参数要求)
        interceptorOptions.data.deviceKey = device.deviceKey;
      }
      return interceptorOptions;
    }
  }
});

不过这种场景极少出现,通常自动传递机制即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:12:11