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中的InitiateAuth
和AdminInitiateAuth
推荐答案调用之间的区别。
要阐明API调用的用法,请执行以下操作:
InitiateAuth
为客户端/浏览器端API调用,该API调用不需要任何敏感凭据即可发起质询等参数。AdminInitiateAuth
是在服务器端运行的,API调用始终需要开发者凭证才能成功响应。这是因为API调用是AWS SigV4签名的API调用。
此外,这两个API调用都支持不同的Auth流,如下所示。
InitiateAuth
支持以下授权流:
- USER_SRP_AUTH
- REFRESH_TOKEN_AUTH
- USER_PASSWORD_AUTH
- CUSTOM_AUTH
更新(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
相关文章