api - 如何在不使用 API Gateway 的情况下使用 AWS Cognito 进行自定义 Spring REST API 授权
问题描述
场景:
我将在任何 EC2 中运行 Spring Boot REST API 应用程序并公开多个 API,并且我没有为它们使用 AWS API Gateway。
我需要多个用户来访问具有不同角色(Admin、WriteUser、ReadUser)的多个 API。
我可以在 Cognito 用户池中创建用户和组,并且可以在 IAM 中拥有多个角色。
如何配置 AWS Cognito 的 UserPool 和 IdentityPool 以根据用户角色授权不同的 API 访问?有没有办法在不使用 API Gateway 的情况下在 Policy(与 IdentityPool/Resource 服务器关联)中定义这种“基于角色的 API 允许规则”。
提前致谢。
解决方案
我使用带有自定义 JWTFilter 的 Spring security auth2 进行了实现,它将从请求中获取令牌并再次验证 cognito 池的 JWKs 验证文件。
- 用户在 UI 中输入用户名/密码。
- UI 调用后端应用程序,后者调用 Cognito。
- Cognito 返回 JWT 令牌(Idtoken、accessToken、refreshTokens)
- 后端应用程序将 IdToken 作为令牌发送到 UI 并存储在缓存中(也可以是任何数据库)。
- UI 发送此 IdToken 以供下次调用。
JWTFilter 执行以下步骤,用于身份验证:
- 后端应用程序获取令牌,如果存在则在缓存中验证,然后使用 Cognito JWK 验证签名和到期,并从中获取详细信息。
- 后端应用程序创建 UserAuthentication 扩展 AbstractAuthenticationToken 并从解析的令牌值填充详细信息并存储在上下文(会话)中
资源授权将按照网络安全配置中提到的配置完成。
推荐阅读
- python - 从 elasticsearch 获取所有记录
- node.js - 如何让 ExpressJS 中间件接受参数
- laravel - 使用一张表中的一列并等于 laravel 中的一个输入
- python - 在Tensorflow.keras 2.0中,当一个模型有多个输出时,如何为model.fit()定义一个灵活的损失函数?
- google-cloud-platform - Google Appengine 关闭和启动脚本
- c++ - 复制构造抽象类型的数据成员
- json - How to Read .json file in python code from google cloud storage bucket
- python - 在输入内容之前不会显示消息
- php - 在php中使用胖箭头函数出错
- matlab - 数据评估