微服务安全模式:API Gateway 层的访问控制
在微服务架构中,API 是服务对外的唯一接口。如果缺乏有效的访问控制机制,系统很容易遭遇非法调用、权限越界或数据泄露等风险。API 访问控制(API A***ess Control) 是微服务安全体系的核心环节,它确保只有合法的用户和服务,才能访问对应的 API 接口。
一、API 访问控制的目标
-
身份鉴别(Authentication)
- 确认调用方的身份(用户、应用或服务)。
-
权限授权(Authorization)
- 控制调用方能访问哪些 API,具备哪些操作权限。
-
最小权限原则(Least Privilege)
- 调用方只能访问所需资源,避免越权。
-
安全可观测性
- 所有 API 调用应可追踪、审计,并具备告警能力。
二、常见的 API 访问控制策略
-
基于 API Key 的控制
- 简单易用,常用于轻量级服务或公开 API。
- 局限:难以精细化控制权限,不支持动态过期。
-
基于 OAuth2 / OpenID Connect 的控制
- 通过 A***ess Token 控制访问,支持细粒度权限(Scopes、Roles)。
- 常用于企业级微服务与外部系统交互。
-
基于 RBAC(角色访问控制)
- API 权限与用户角色绑定。
- 例如:
ADMIN可以调用所有接口,USER只能访问部分接口。
-
基于 ABAC(属性访问控制)
- 根据上下文属性(时间、地点、请求来源、用户属性等)动态判定权限。
- 更灵活,但实现复杂。
-
零信任架构下的 API 控制
- 不再假设“内部服务是安全的”,所有请求都需鉴权。
- 结合 mTLS、OAuth2、策略引擎实现动态控制。
三、Spring Boot 3 实现 API 访问控制示例
1、架构图
Client
|
v
[ API Gateway ] --- 认证鉴权 ---> [ Auth Server / Keycloak / OAuth2 ]
|
+--> [ Order Service ]
+--> [ User Service ]
+--> [ admin Service ]
2、项目依赖(pom.xml)
<dependencies>
<!-- Spring Cloud Gateway -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- Security for Gateway -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>