使用aws cognito权限规则

时间:2018-04-26 14:15:37

标签: node.js aws-lambda aws-sdk aws-api-gateway aws-cognito

我可以通过amazon-cognito-identity-js注册和验证用户身份 和aws-sdk以及实现它的过程非常简单明了。现在我在node.js中构建了很少的API,如何使用Cognito策略(即权限)对这些API进行授权,并将它们包装在已登录的用户中,我已经能够获得idTokenaccessTokenrefreshToken

我在阅读文档和观看视频教程时遇到的其他事情是aws-lambdaaws-api-gateway。我理解aws-lambda是一种定义方法,可以与no-sql数据库(即AWS dynamo)和api-gateways进行通信,以访问这些lambda函数并与DB交互,并且所有这些都是无服务器的。

我的问题是,如果我在Node.js中编写自己的API并且需要将Cognito用户池与其集成并使用AWS Cognito策略,用户组和角色保护这些资源,该怎么办?请指导我这方面。

1 个答案:

答案 0 :(得分:1)

您可以使用在授权用户授权node.js API时获得的相同身份验证令牌。它可以通过多种方式完成。其中一种方法是在每个构造函数中调用isAuthenticated()方法,该方法将检查是否存在有效的令牌。

export interface LoggedInCallBack{
isLoggedIn(message:string, loggedIn:boolean):void;
}


 isAuthenticated(callBack : LoggedInCallBack){
    if(callBack==null){
        throw("User login service call cannot be null");
    }
    console.log("Is authneticated");
   var cognitoUser = this.cognitoUtil.getCurrentUser();
   console.log("Is cognito user empty? " + cognitoUser);
   if(cognitoUser!=null){
       cognitoUser.getSession(function (err, session){
           if(err){
               console.log("Couldn't get session:" + err);
               callBack.isLoggedIn(err, false);
           }
           else{
               console.log("Session is: " +session);
               callBack.isLoggedIn(err, true);
           }
       })
   }
   else{
       callBack.isLoggedIn("Cannot retrieve the current user", false);
   }
}