微服务授权。如何防止具有有效 JWT 的用户访问其他用户的资源?
Posted
技术标签:
【中文标题】微服务授权。如何防止具有有效 JWT 的用户访问其他用户的资源?【英文标题】:Microservices authorization. How to prevent user with valid JWT access other users resources? 【发布时间】:2020-08-23 03:23:57 【问题描述】:我在 API 网关后面有许多无状态微服务,我想确保包含有效授权 JWT 令牌的用户请求无法访问其他用户的资源。
目前,我的 API 网关仅验证 JWT 是否未过期且有效。
为了防止用户请求具有其他用户的有效 JWT 访问资源,我打算使用 Spring 的 Method Level Security 并检查主体用户 id 是否与请求 URL 路径中的 userId 匹配。但这意味着,在每个微服务中,我需要添加 Spring Security,创建授权过滤器,并根据我从 JWT 读取的信息创建安全上下文。我需要在每个微服务中重新创建 Spring Security Context。
这是一个正确的方法吗?如果不是,还有什么方法可以阻止包含有效 JWT 的用户请求访问其他用户的资源?
请给我建议。
【问题讨论】:
【参考方案1】:你如何处理它通常是正确的方法。为了使每个服务与其他服务保持分离,重要的是能够确定哪些方法/端点关心用户范围,哪些不关心。网关中更多的规则和逻辑意味着对单个服务可以做什么的更多限制。
话虽如此,如果您有适用于所有服务的全局可预测规则,那么您就有理由将逻辑放入网关中。诸如 JWT 验证之类的规则就是这样一个规则的示例,该规则足够标准化,您可以假设底层服务在收到令牌时想要对它做什么(验证它)。如果您有一个可以安全地全局应用的规则,您可以将其从服务中拉出并放入网关中。否则,你最好做一些重复,这样你就不会造成阻碍服务以不同方式处理输入的障碍。
【讨论】:
谢谢你,@David T.以上是关于微服务授权。如何防止具有有效 JWT 的用户访问其他用户的资源?的主要内容,如果未能解决你的问题,请参考以下文章
如何给运行在 SAP BTP 上的 Java 微服务增添访问控制功能