使用 AWS Amplify 认证用户与 ALB 或 API 网关通信?

Using AWS Amplify authenticated user to communicate with an ALB or API Gateway?

我根据 the guide 使用 amplify add auth 将我的 AWS Cognito 集成到我的 React Native 应用程序中,一切都很好,我可以在应用程序中注册和登录。 cli 向导将两个应用程序客户端与其创建的用户池相关联:[poolid]_app_client[poolid]_app_clientWeb

我想让经过身份验证的用户能够与 EC2 实例上托管的 Web 应用程序进行通信。我想我可以使用 Application Load Balancer 来执行此操作,方法是将其设置为将经过身份验证的请求转发到 EC2 实例。问题是,我无法创建使用 Cognito 用户池进行身份验证的 Application Load Balancer 默认操作。

如果我选择与 [poolid]_app_clientWeb 相关联的 App Client,我会在保存时收到错误消息:Error creating listener The user pool client must have a client secret。这是 aws-exports.js 中放大工具导出到我的 React Native 应用程序的客户端 ID。

如果我选择与 [poolid]_app_client 关联的应用程序客户端,我会得到 Error creating listener OAuth flows must be enabled in the user pool client

不确定如何进行。 ALB 是要走的路还是 API 网关?

API Gateway 使这变得更加简单。在完成创建 API 之后,我能够创建一个与我的 Cognito 用户池(clientWeb 用户池)连接的授权者。然后,在创建端点资源之后,我将它们与配置的 Method Request 部分中的授权方相关联。

然后我可以发送我从 Amplify 获得的身份令牌:

(await Auth.currentSession()).idToken.jwtToken

作为我配置的端点的 HTTP header 值。

您应该为您的客户端"User Pools -> App Integration -> App client" 设置进行适当的更改