如何在不使用 API Gateway 的情况下使用 AWS Cognito 进行自定义 Spring REST API 授权

Vir*_*tel 5 api authorization amazon-cognito spring-rest

场景:
我将在任何 EC2 中运行 Spring boot REST API 应用程序并公开多个 API,并且我没有为它们使用 AWS API Gateway。
我需要多个用户来访问具有不同角色(Admin、WriteUser、ReadUser)的多个 API。
我可以在 Cognito 用户池中创建用户和组,并且可以在 IAM 中拥有多个角色。

如何配置 AWS Cognito 的 UserPool 和 IdentityPool 以根据用户角色授权不同的 API 访问?是否有任何方法可以在不使用 API 网关的情况下在策略(与 IdentityPool/资源服务器关联)中定义此类“基于角色的 API 允许规则”。

提前致谢。

Vir*_*tel 4

我使用 Spring security auth2 和 Custom JWTFilter 进行了实现,它将从请求中获取令牌并再次验证 cognito 池的 JWKs 验证文件。

  • 用户在 UI 中输入用户名/密码。
  • UI 调用后端应用程序,后端应用程序调用 Cognito。
  • Cognito 返回 JWT 令牌(Idtoken、accessToken、refreshTokens)
  • 后端应用程序将 IdToken 作为令牌发送到 UI,并存储在缓存中(也可以是任何数据库)。
  • UI 发送此 IdToken 以供下次调用。

JWTFilter 执行以下步骤进行身份验证:

  • 后端应用程序获取令牌,在缓存中进行验证(如果存在),然后使用 Cognito JWK 验证签名和过期时间并从中获取详细信息。
  • 后端应用程序创建扩展 AbstractAuthenticationToken 的 UserAuthentication 并从解析的令牌值填充详细信息并存储在上下文(会话)中

资源授权将按照网络安全配置中提到的配置进行。