无法作为管理员从后端对cognito进行身份验证

时间:2017-06-09 12:30:13

标签: javascript node.js amazon-cognito aws-cognito

我需要从我的后端(Node.js)获取所有用户。但是当我试图进行身份验证时,我得到了:

  

错误AccessDeniedException,User ... assume-role / Cognito_XXXUnauth_Role / CognitoIdentityCredentials无权执行:cognito-idp:AdminInitiateAuth ...

我目前的代码:

let cognitoidentityserviceprovider = new AWS.CognitoIdentityServiceProvider()
var params = {
  AuthFlow: 'ADMIN_NO_SRP_AUTH',
  ClientId: process.env.AWS_CLIENT_ID,
  UserPoolId: process.env.AWS_USER_POOL_ID,
    AuthParameters: { 
      USERNAME: '...'
      PASSWORD: '...'
   }
}
cognitoidentityserviceprovider.adminInitiateAuth(params, (err, result) => { ... })

看起来我没有登录,因为使用了Cognito_XXXUnath_Role。有人有类似的问题吗?

2 个答案:

答案 0 :(得分:1)

您正在尝试使用Cognito Federated Identity凭据提供程序来创建CognitoIdentityServiceProvider服务客户端。这将使AWS SDK调用联合身份服务以获取将用于呼叫cognitoidentityserviceprovider.adminInitiateAuth(...)的临时AWS凭证。

在这种情况下,有两种可能的解决方案:

  1. 使用其他凭据提供程序创建CognitoIdentityServiceProvider客户端,其中包含可以调用adminInitiateAuth API访问权限的凭据。既然您关心从后端执行此操作,那么这样做应该是安全的。 This guide可以为您提供帮助。
  2. 如果必须使用Cognito Federated Unauth角色创建服务客户端,请在您用于执行此操作的身份池的未经身份验证的角色中允许cognito-idp:AdminInitiateAuth

答案 1 :(得分:0)

如果您使用的是无服务器框架,则以下设置应可修复错误:

provider:

  # you can add statements to the Lambda function's IAM Role here
  iamRoleStatements:
    - Effect: "Allow"
      Action:
        - "cognito-idp:AdminInitiateAuth"
      Resource:
        - "arn:aws:cognito-idp:*"