【发布时间】:2021-01-07 10:51:33
【问题描述】:
我在 kubernetes 上部署了一个微服务架构,带有 istio 网关,AWS cognito 用于身份验证。现在,当用户登录到 APP 时,他可以使用 API 创建/查看数据。移动 FE 应用程序发送需要为其创建或获取数据的登录用户的“userId”。来自 cognito 的 JWT 令牌随声明中包含 userId 的每个请求一起发送。
我想要实现的是限制我的 API,以便只为发送令牌的用户创建数据,或者只为 JWT 令牌中的用户获取数据。例如考虑以下请求
POST /api/data/submit
{
"name": "John doe",
"address": "131 parklane street",
"userId": 1000,
...
}
在上述请求中,任何用户(Say id:90)都可以为用户id 1000创建数据。
目前在项目中实现的解决方案是使用 Spring Aspects。缺点是它仅适用于将 userId 作为 PathVariable 发送的 API,尽管可以修改它以使用反射检查请求对象,但效率不高。
我想到的解决方案是使用 Bean Validation。我创建了一个自定义注释,可以使用自定义验证器在字段和参数级别应用,并验证该值是否应与令牌中存在的 userId 匹配。
我尝试寻找最佳方法,但大部分都找到了基于角色授权的解决方案,尽管我想要实现的目标有所不同。
任何指导都会有所帮助。
【问题讨论】:
标签: spring spring-boot authorization bean-validation