如何从 lambda 函数获取用户的 Amazon Cognito 身份 ID (user_identity_id)?

Pav*_*vle 5 javascript amazon-s3 amazon-cognito aws-lambda aws-amplify

在 Amplify 文档中的“存储/文件访问级别”部分下,有一段内容指出:

文件存储在 private/{user_identity_id}/ 下,其中 user_identity_id 对应于该用户的唯一 Amazon Cognito 身份 ID。

如何从 lambda 函数获取 user_identity_id?

对 lambda 的请求已获得授权,event.requestContext.authorizer.claims对象可用,我可以看到用户数据,但看不到 user_identity_id。

编辑:现在我看到有一个字段event.requestContext.identity.cognitoIdentityId,但值是null。仍然需要找到获取它的方法。

Pav*_*vle 3

好的,所以没有正确的方法来映射 Cognito 身份 ID 和 Cognito 用户。这里有一个很长的讨论,可以找到一些解决方法。现在,我将使用解决方案,您可以指定自定义属性(很可能是子属性)作为文件夹名称,而不是identity_id。

编辑:还有另一种解决方案可能会有所帮助(在互联网上的某个地方找到,并且我验证了它是否有效)

const AWS = require('aws-sdk')
const cognitoIdentity = new AWS.CognitoIdentity();

function getCognitoIdentityId(jwtToken) {
  const params = getCognitoIdentityIdParams(jwtToken);
  return cognitoIdentity
    .getId(params)
    .promise()
    .then(data => {
      if (data.IdentityId) {
        return data.IdentityId;
      }
      throw new Error('Invalid authorization token.');
    });
}

function getCognitoIdentityIdParams(jwtToken) {
  const loginsKey = `cognito-idp.${process.env.REGION}.amazonaws.com/${process.env.USERPOOLID}`;
  return {
    IdentityPoolId: `${process.env.IDENTITY_POOL_ID}`,
    Logins: {
      [loginsKey]: jwtToken,
    },
  };
}
Run Code Online (Sandbox Code Playgroud)