AWS Lambda-Cognito身份ID在相同登录时发生更改



我正在使用AWS Lambda、Cognito和API网关(与Serverless协调)为我的web-app构建API。

用户使用Cognito进行身份验证,然后向API发出身份验证请求(模式复制自Serverless Stack教程,我在其中获取他们的Cognito ID:

event.requestContext.identity.cognitoIdentityId

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

我遇到的问题是,当不同的人(目前与我合作的其他开发人员)使用相同的凭据登录,但来自不同的计算机(在某些情况下,来自国家/地区)时,与他们的请求一起发送的cognitoIdentityId完全不同——对于同一用户userPool用户记录,

注意:我没有与任何"联合身份"(即Facebook等)集成。这是一个普通的旧电子邮件登录。每个人都使用相同的信誉,但有些人的请求来自不同的Cognito ID。

这是一个很大的问题,因为我看不到其他方法来唯一标识与Cognito记录关联的DB中的用户记录。

问题:我错过了什么吗?有更好的方法吗?这是预期的行为吗?


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);
}
}

上面的解析器只是一个获取我想要的ID的util。

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

{
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凭据。无服务器堆栈也详细介绍了这一点。

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

相关内容

  • 没有找到相关文章

最新更新