AWS Cognito用户池应用程序客户端中设置的含义是什么?

12

我在教程、网站上搜索了很久,发现所有人都没有解释(我理解为什么)应用程序客户端设置中的复选框:

  1. 启用基于服务器的身份验证的登录 API
  2. 仅允许自定义身份验证
  3. 启用基于应用的身份验证的用户名密码(非 SRP)流程

“了解更多”链接对我没有帮助,提供了很多信息,但不容易理解和掌握。有没有人能够解释这些设置呢?

2个回答

13
这是我的看法。
应用客户端有几个身份验证流程配置。
1. 为管理员API启用用户名密码身份验证(ALLOW_ADMIN_USER_PASSWORD_AUTH)
这启用了服务器端身份验证流程。如果您没有终端用户应用程序,而是使用安全的后端或服务器端应用程序。

enter image description here

2. 启用基于Lambda触发器的自定义身份验证(ALLOW_CUSTOM_AUTH)

这将启用自定义身份验证流程。使用AWS Lambda触发器,可以帮助您创建基于挑战/响应的身份验证模型。 https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html

用户池 -> 触发器下,您可以看到许多Lambda函数。您可以使用创建身份验证挑战定义身份验证挑战验证身份验证响应函数来创建自定义身份验证流程。

3. 启用基于用户名密码的身份验证(ALLOW_USER_PASSWORD_AUTH)

这将启用客户端身份验证流程,该流程使用基于用户密码的身份验证。在此流程中,Cognito会在请求中接收密码。

您可以使用AWS Mobile SDK for Android、AWS Mobile SDK for iOS或AWS SDK for JavaScript来实现此功能。

4. 启用基于SRP(安全远程密码)协议的身份验证(ALLOW_USER_SRP_AUTH)

除了密码验证外,此流程与第3节中的上述流程类似。此流程使用SRP协议来验证密码。

http://srp.stanford.edu/whatisit.html https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolClientType.html

enter image description here

5. 启用基于刷新令牌的身份验证(ALLOW_REFRESH_TOKEN_AUTH)

在成功进行身份验证后,Amazon Cognito会向您的应用程序返回用户池令牌(三个令牌)。您可以使用这些令牌授予用户访问自己的服务器端资源或Amazon API Gateway的权限。或者,您可以将它们交换为临时AWS凭证,以访问其他AWS服务。

这三个令牌是ID令牌(JWT)、访问令牌和刷新令牌。刷新令牌可用于检索新的ID和访问令牌。一旦您登录移动应用程序,每次关闭和打开应用程序时都不需要重新登录,该功能是使用刷新令牌实现的。

https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

Amazon Cognito托管UI怎么样?

应用程序客户端可以配置为使用内置的Cognito网页来注册和登录用户。当使用托管UI时,您可以启用授权码授权和隐式授权,然后根据需要使用每个授权。

https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html


8
这里是我对这些选项的解释。在此之前,我想简要提一下 Oauth2,这是 AWS Cognito 基于的协议。
在 AWS Cognito 的上下文中,Cognito 本身是 认证(OAuth)服务器,也是 资源服务器(因为我们在 Cognito 用户池中创建用户),而你的应用程序将成为 客户端(发送认证请求)。客户端必须首先向 OAuth 服务器注册自己,这就是在 Cognito 的“应用程序客户端”部分所做的事情。
推荐的 OAuth2 流程是 授权码授权流程。在此流程中,

i) 客户端将用户名/密码发送到 OAuth 服务器。

ii) OAuth 服务器验证并使用授权码回调客户端。

iii) 客户端再次将此代码发送回 OAuth 服务器

iv) OAuth 服务器将令牌发送给客户端。

请阅读上面链接的文章以了解有关 OAuth2 的更多解释。
现在解释 Cognito 应用程序客户端设置中的选项: 1. 为基于服务器的身份验证启用登录 API 通过此选项,您的客户端应用程序可以直接接收令牌,而不必先获得授权码的附加步骤。
有像 AdminInitiateAuth、Admin-* 这样的 Cognito API 可以实现这一点。但是,这些 API 需要 AWS 管理员凭据。因此,通常由客户端应用程序的后端服务器进行这些调用。前端可以将用户名/密码传递给后端,后端服务器可以与 AWS Cognito 通信并授权用户。 2. 仅允许自定义身份验证 在这里,您不使用 OAuth 提供的授权码授权流程。相反,您可以定义自己的步骤和挑战。在进行身份验证并提供令牌之前,您的客户端应用程序可以询问秘密问题等。 3. 为基于应用程序的身份验证启用用户名/密码(非 SRP)流程 这是最不安全的流程。它跳过了返回 授权码 的部分,并直接将令牌返回给客户端。
希望这能解释清楚。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接