微服务授权。如何防止具有有效 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 微服务增添访问控制功能

通过多个微服务进行 JWT 授权

如何将用户角色从授权服务器复制到下游微服务?

这个 JWT 实现是不是可以防止 XSS 和 CSRF 攻击,同时仍然允许我访问有效负载?

使用 jwt 在微服务中进行身份验证

验证微服务架构的每个服务中的访问令牌(JWT)