我有一个Lambda函数来处理由API网关触发的POST请求。后者设置为通过Cognito用户池授权器进行授权。授权有效-如果我传递了一个用户的ID令牌,请求就会被处理,如果我不传递,我就会得到一个401。
但是,我无法在Lambda函数中获取授权用户的身份。所有的文档都让我相信它应该在上下文中,但它不是。我也无法将它映射到上下文中。此外,似乎也没有一种方法可以查询给定ID令牌的用户的用户池。
我是否需要一个身份池来完成此任务?如果是这样的话,这是如何工作的?为什么API网关不能自动传递用户的身份?
使用事件。请求上下文。授权人。声称。sub
获取用户的Cognito标识,该标识基本上是用户的ID。这假设您正在使用与API网关和Lambda的代理集成。
下面是一个使用Node;的简单示例,其他SDK应该类似。
exports.handler = async (event, context, callback) => {
let cognitoIdentity = event.requestContext.authorizer.claims.sub
// do something with `cognitoIdentity` here
const response = {
statusCode: 200,
headers: {
"Access-Control-Allow-Origin": "*"
},
body: JSON.stringify("some data for user"),
};
return response;
};
这取决于您是否在lambda的集成请求中选择了使用Lambda代理集成。如果您设置了它,那么所有令牌的声明将在event.requestContext.authorizer.claims
上传递。
如果未使用Lambda代理集成,则需要在集成请求中为Lambda使用主体映射模板
。内容类型为application/json
的示例模板如下:
"context" : {
"sub" : "$context.authorizer.claims.sub",
"username" : "$context.authorizer.claims['cognito:username']",
"email" : "$context.authorizer.claims.email",
"userId" : "$context.authorizer.claims['custom:userId']"
}
当然,这需要在用户池中有一个名为userId的自定义属性,并且客户端可以读取这些属性。
不能对aws认知IDP API使用id令牌,需要使用访问令牌。但是,如果您的lambda被授权,您可以使用AdminGetUser调用用户名。
我正在使用AWS Congito用户池进行帐户管理,其中Cognoto标识池将此用户池作为标识提供者。我用它来控制通过API网关对API的访问,API网关向Lambda发送请求。我的Lambda是使用Micronaut用Java8实现的。所有这些都很好。 在Lambda中,我从中的获得名称: 在Cognito标识符的字符串名称中返回的是什么。像这样的东西: us-east-1:xxxxe650-5
我正在使用AWS Amplify创建一个Lambda函数、RESTAPI和Cognito用户池。我想检索向endpoint发出请求的Cognito用户,以便访问他们的用户属性。 我为函数选择了无服务器Express模板: app.js 客户端配置根据当前用户的令牌设置授权头: 应用程序。js 事件()或上下文是否保存用户信息?或者我可以以某种方式使用授权标头吗? 另外,在Lambda函数中进行Co
一旦用户登录到Cognito,我希望使用lambda函数获取与该用户关联的当前角色。 似乎Cognito用户池或身份池将用于移动应用程序,而前端开发人员? 正确的做法是什么?代码示例总是很好,但我更喜欢寻找逻辑解决方案或文档链接。 我尝试了亚马逊认知身份(这不是我要找的),并阅读了所有(?)留档这件事,但我不能在这里连接点...
我正在使用AWS amplify创建一个应用程序,用户可以使用私有或公共文件访问级别上传图像,如文档中所述。除此之外,我还实现了一个lambda函数,该函数根据请求通过API网关修改图像并返回到修改图像的链接。 我想要的是,一个给定的用户应该能够调用API并只修改他自己的图像,而不能修改其他用户的图像;i、 e.允许AWS lambda函数使用来自cognito用户的执行角色。如果我允许lambd
我正在尝试允许第三方应用程序(Google Home)访问AWS Cognito用户池中的信息。 整个流程如下(假设我理解正确): 用户试图将他们的设备(都在各种AWS服务中管理)链接到Google Home。 然后用户被重定向到我们的oauth2页面,在那里他们登录到cognito用户池中的帐户 他们成功登录并获得oauth令牌 Google Home应用程序可以使用该令牌向我们的后端发送请求,
我正在尝试在iOS(Swift)应用程序中实现新的AWS Cognito用户池,但我很难让登录过程正常工作。我基本上是在尝试遵循这里提供的示例。 这是我到目前为止所拥有的: AppDelegate: LoginView控制器: 当我点击“登录”按钮时,似乎什么也没有发生,尽管如果我再次点击它,我会得到一个NSInternalInconsistencyException(我相信这是因为AWSTask