编程语言
首页 > 编程语言> > javascript – AWS Lambda – Cognito Identity ID使用相同的登录名进行更改

javascript – AWS Lambda – Cognito Identity ID使用相同的登录名进行更改

作者:互联网

我正在使用AWS Lambda,Cognito和API Gateway(使用Serverless编排)为我的Web应用程序构建API.

用户使用Cognito进行身份验证,然后对API进行身份验证请求(从Serverless Stack教程复制的模式,我获取其Cognito ID:

event.requestContext.identity.cognitoIdentityId

然后,我获取与该cognitoIdentityId相关联的用户记录,以执行基于角色/权限的逻辑并返回相关数据.

我遇到的麻烦是当不同的人(我正在与之合作的其他开发人员)使用相同的凭据登录时,但是来自不同的计算机(在某些情况下,还有国家),cognitoIdentityId随他们一起发送请求完全不同 – 对于同一用户userPool用户记录!

Note: I am not integrating with any “Federated Identities” (ie, Facebook, etc). This is plain old email sign-in. And everyone is using the same creds, but some people’s requests come from different Cognito IDs.

这是非常有问题的,因为我没有看到另一种方法来唯一地识别与Cognito记录关联的数据库中的用户记录.

QUESTIONS: Am I missing something? Is there a better way to do this? Is this the expected behavior?

API目前实际上并未插入数据库.因为我们的数据结构仍然不稳定,并且应用程序远非实时,我已经构建了一个API,它就像它与数据库集成,并返回数据,但这些数据只是存储在JSON文件中.我将重复下面的一些相关代码,以防它相关.

示例lambda,用于获取当前用户:

export function getSelf(event, context, callback) {
  const { cognitoID } = parser(event);

  const requester = cognitoID && users.find(u => u.cognitoID === cognitoID);

  try {
    if (requester) {
      return callback(null, success(prep(requester, 0)));
    } else {
      return authError(callback, `No user found with ID: ${cognitoID}`);
    }
  } catch (error) {
    return uncaughtError(callback, error);
  }
}

That parser stuff up top is just a util to get the ID I want.

关联的用户记录可能如下所示:

  {
    cognitoID: 'us-west-2:605249a8-8fc1-40ed-bf89-23bc74ecc232',
    id: 'some-slug',
    email: 'email@whatever.com',
    firstName: 'John',
    lastName: 'Jacob Jingleheimer Schmidt',
    headshot: 'http://fillmurray.com/g/300/300',
    role: 'admin'
  },

解决方法:

Cognito用户池用于验证用户身份并为您提供JWT令牌.当您想要访问任何AWS服务时,您需要AWS凭证(访问密钥和密钥).这是您应该使用联合身份的地方.您从Cognito用户池获得的令牌应与Federated Identities交换,以获取AWS凭据以访问其他AWS服务.无服务器堆栈也在detail中涵盖了这一点.

现在,由于您尚未在身份池中添加用户池作为身份验证提供程序,因此我的观察是您从Federated Identities获取未经身份验证的身份(您可以从Amazon Cognito控制台确认),这就是为什么每个身份都不同的原因您的团队成员您应该在身份池中将用户池添加为身份验证提供程序,并按照documentation提供登录映射中所需的信息.

标签:javascript,amazon-web-services,aws-lambda,amazon-cognito,serverless-framework
来源: https://codeday.me/bug/20190710/1426774.html