AWS Cognito-AdminInitiateAuth与InitiateAuth

我们希望利用AWS Cognito进行身份验证,其架构如下: client (browser) -> our server -> AWS Cognito

设置了各种配置后,initiateAuth似乎与AdminInitiateAuth没有什么不同,所以我想了解一下在这些配置下,是否选择其中一个很重要。

创建一个client secret应用并使用initiateAuth时,集成体验似乎与使用ADMIN_NO_SRP_AUTH身份验证流程的adminInitiateAuth几乎相同。后者甚至不需要AWS文档中所述的AWS凭证。我与Cognito的集成如下:

initiateAuth:

  const payload = {
    AuthFlow: "USER_PASSWORD_AUTH",
    ClientId: cognitoClientId,
    AuthParameters: {
      USERNAME: username,
      PASSWORD: password,
      SECRET_HASH: generateSignature(username)
    }
  }
  const response = await cognitoClient.initiateAuth(payload).promise();

adminInitiateAuth:

  const payload = { 
    UserPoolId: userPoolId,
    AuthFlow: "ADMIN_NO_SRP_AUTH",
    ClientId: cognitoClientId,
    AuthParameters: {
      USERNAME: username,
      PASSWORD: password,
      SECRET_HASH: generateSignature(username)
    }
  }
  const response = await cognitoClient.adminInitiateAuth(payload).promise();

您可以看到区别在于AuthFlow值不同,调用的方法不同,ADMIN_NO_SRP_AUTH需要UserPoolId参数,这在我看来很肤浅。

我们还基于客户端机密生成签名,这是我们将安全处理的内容。

API

我知道您想知道Amazon Cognito中的InitiateAuthAdminInitiateAuth推荐答案调用之间的区别。 要阐明API调用的用法,请执行以下操作:

  • InitiateAuth为客户端/浏览器端API调用,该API调用不需要任何敏感凭据即可发起质询等参数。
  • AdminInitiateAuth是在服务器端运行的,API调用始终需要开发者凭证才能成功响应。这是因为API调用是AWS SigV4签名的API调用。

此外,这两个API调用都支持不同的Auth流,如下所示。

InitiateAuth支持以下授权流:

  • USER_SRP_AUTH
  • REFRESH_TOKEN_AUTH
  • USER_PASSWORD_AUTH
  • CUSTOM_AUTH
请注意,AWS CLI文档[a]当前声明ADMIN_NO_SRP_AUTH是一个可能的值。但是,我已经在自己端测试了API调用,我可以确认CLI的文档当前是不正确的。

更新(2019/12/09):看起来在编写此答案后,Amazon Web服务已将其文档更新为正确的可能值。文档现在说明以下内容:

ADMIN_NO_SRP_AUTH is not a valid value.

AdminInitiateAuth支持以下授权流:

  • USER_SRP_AUTH
  • REFRESH_TOKEN_AUTH
  • CUSTOM_AUTH
  • ADMIN_NO_SRP_AUTH
  • USER_PASSWORD_AUTH
示例用例InitiateAuth:如果您希望您的用户通过身份验证进入您的Web应用程序。

示例用例AdminInitiateAuth:任何需要服务器端身份验证或基于特定的AWS凭据访问过滤的用例,只有特定的IAM用户可以使用Cognito进行身份验证。

如george前面所述,InitiateAuth将非常适合您的用例,因为您的应用程序是一个客户端应用程序。 此外,如果您关心安全性,可以将USER_SRP_AUTH与InitiateAuth一起使用。有关在生产代码中使用USER_SRP_AUTH流的更多信息,您可以参考以下NPM文档[b]。

引用

[a]。https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/initiate-auth.html

[b]。https://www.npmjs.com/package/cognito-srp

相关文章