将 AWS API Gateway for 基于 Lumen 的 REST API Service 与 EC2 中托管的



我完全是亚马逊网络服务的新手。目前,我正在使用Laravel的微框架Lumen开发了一个REST API服务。我正在使用护照进行基于令牌的身份验证,并且所有工作正常。我需要一个代理服务器来隐藏我的实际终端节点并执行一些其他功能,因此我计划使用 AWS API 代理网关并在 EC2 实例中托管 API 终端节点。

我浏览了从 AWS 文档使用 HTTP 代理集成构建 API。 但是没有关于使用 Oauth 使用自定义身份验证的内容。

我的怀疑是

  1. 如何在使用 AWS API 网关时使用护照身份验证
  2. 有什么好方法可以向客户隐藏我的 REST 端点,并且需要一种方法来不时更改代理端点。

我不知道Laravel生态系统,但是:

  • 如果 passport 暴露了类似 OpenId Connect 的内容,您可以使用 Cognito 联合身份来精确地联合您的身份,并将授权身份与给定的 IAM 角色相关联,而将授权身份与另一个角色相关联;

  • 您可以使用 API 网关自定义授权方执行完全可自定义的身份验证;

尝试扩展您的问题,以便我们可以添加更多详细信息...

  1. 是的,就像BAD_SEED所说的那样,您可以使用 API 网关 Lambda 授权方(以前称为自定义授权方)执行任何逻辑来验证令牌,因为它只是一个 JavaScript 包。

因此,一个选项类似于 auth0 在 (https://auth0.com/docs/integrations/aws-api-gateway/custom-authorizers/part-3) 和 (https://github.com/auth0-samples/jwt-rsa-aws-custom-authorizer) 中所做的。其示例授权方执行以下操作:

  • 它确认 OAuth2 持有者令牌已通过授权标头传递。
  • 它确认令牌是已使用 RS256 算法和特定公钥签名的 JWT
  • 它通过检查配置的 JWKS 端点返回的配置来获取公钥
  • 它还确保 JWT 具有所需的颁发者(ISS 声明)和受众(aud 声明)

但不幸的是,Passport 不支持 JWKS 端点(它公开了令牌签名的公钥)。所以你可能不得不自己暴露它。

另一种选择要容易得多,您只需在应用程序中创建一个令牌验证端点,例如/users/me,并使用身份验证中间件对其进行保护。然后在您的 Lambda 授权方中,使用请求中的令牌调用它到您的其他微服务终端节点。通过这种方式,所有令牌验证内容都留给 Passport,授权方只是根据验证结果执行策略。

  1. 不太确定要达到什么,但 API Gateway 只是一个代理,因此您当然可以更改其前端端点的后端端点,最好不要经常更改。