首页 > 解决方案 > 使用 Cognito 和 JWT 的 K8s 的 AWS API 网关

问题描述

我有 AWS K8s 集群(EKS),我想使用 AWS API 网关来保护端点并将授权逻辑与微服务分开。我需要有 2 个身份验证模式:

  1. 发送登录名/密码并获取 JWT
  2. OAuth2

API 网关和 K8s 集群之间通过ALB Ingress Controller集成。看起来不错。然后我需要以某种方式进行身份验证。AWS 提供 Cognito 作为一项服务来管理用户以及拥有自己的身份提供商的可能性。我知道我们可以将 API 网关授权器与 Cognito 集成,但我无法理解以下内容:

  1. 例如,如何将 Cognito 与已经存在的 LDAP 集成?(SAML?)
  2. 我可以使用自己已经创建的 OAuth2 身份验证端点吗?
  3. 如何使用登录名/密码进行身份验证并使用 API 网关 + Cognito 检索 JWT?

标签: amazon-web-servicesaws-api-gatewayamazon-cognito

解决方案


1 例如,如何将 Cognito 与已经存在的 LDAP 集成?(SAML?)

通过 SAML IDP 使用 Cognito 用户池。 https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-saml-idp.html

2 我可以使用自己已经创建的 OAuth2 身份验证端点吗?

是的,对 Cognito 身份池使用 Developer Authenticated Identities。从现有用户数据库进行身份验证的用户将获得身份池的授权,方法是担任身份池的经过身份验证的 IAM 角色,在该角色中设置对 AWS 资源的访问级别。 https://docs.aws.amazon.com/cognito/latest/developerguide/developer-authenticated-identities.html

3 如何使用登录名/密码进行身份验证并使用 API 网关 + Cognito 检索 JWT?

看到正在使用 API 网关,实现此目的的最佳方法是在使用 Cognito 用户池的 API 网关中实现 Lambda 授权方。然后,您将能够在该 Lambda 授权方中获取 JWT 令牌,授权方中的声明也将在集成请求 vtl 中可用,并可使用 $context 访问。即 $context.authorizer.claims.sub https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html


推荐阅读