我要做的是为我的Lambda函数设置API网关,以便在DynamoDB中保存一些(或者我想仅为登录用户使用的其他内容)。但我不明白如何验证AccessToken以及如何从中获取用户。
我在AWS论坛上发现了这个post,我决定尝试方法1。
Cognito用户池+ API网关+ API网关自定义授权程序+ Cognito用户池访问令牌。
所以现在我已登录用户:
var authenticationData = {
Username : 'username', // your username here
Password : 'password', // your password here
};
var authenticationDetails = new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.authenticateUser(authenticationDetails, {
onSuccess: function (result) {
console.log('access token + ' + result.getAccessToken().getJwtToken());
....
和他的accessToken。我还在API调用中设置了自定义API网关自定义授权程序。
现在我应该验证访问令牌并决定是允许还是拒绝方法调用。但我不明白该怎么做以及如何从令牌中检索用户?
答案 0 :(得分:5)
请查看此博客文章中的示例代码:https://mobile.awsblog.com/post/Tx3JK25U7Z9EUIU/Integrating-Amazon-Cognito-User-Pools-with-API-Gateway
答案 1 :(得分:4)
您不需要API网关自定义授权程序...只需对API端点进行身份验证 - 转到其方法请求并选择AWS_IAM进行授权下拉列表..其中默认选择NONE ...
当访问令牌发送到此终点时 - 它将自动检查访问令牌角色(与cognito服务通信后)并检查随角色附加的策略。
如果IAM策略允许调用此端点 - AWS API将进一步执行它,否则它将使您返回403错误或某些错误
您不需要编写任何代码 - 除非您有一些完全不同的auth逻辑要应用 - 这可以通过" API网关自定义授权程序"
实现答案 2 :(得分:0)
适用于Cognito用户池+ API网关+ API网关自定义授权程序+ Cognito用户池访问令牌
您应该创建Cognito Authorizer(在创建自定义授权程序时作为选项提供)并链接您的用户池&身份池,然后客户端需要发送idToken(使用用户池SDK生成)来访问端点。此idToken将通过Coginito Authorizer(在授权方法下拉列表中使用)通过Cognito Identity Pool进行验证。
由SDK生成的idToken可以使用另一个lambda +端点(如登录端点)完成,也可以使用cognito mobile sdk生成。