简介
Apache APISIX 是一款高性能的 API 网关,提供强大的身份验证机制,包括 OAuth 2.0、JWT 和 OIDC。本文将介绍如何配置 Apache APISIX,使用这些身份验证协议来保障 API 的访问安全。
为什么身份验证在 API 网关中至关重要
身份验证确保只有经过授权的客户端才能访问 API,从而提供:
- 访问控制:限制仅允许已通过身份验证的用户访问。
- 安全合规:保护敏感的 API 数据。
- 单点登录 (SSO):提升用户体验。
- 委托授权:允许第三方应用代表用户执行操作。

Apache APISIX 中的身份验证机制
1. 在 Apache APISIX 中使用 OAuth 2.0 身份验证
Apache APISIX 通过验证由外部身份提供商 (IdP)(如 Keycloak、Auth0 或 Okta)签发的令牌来支持 OAuth 2.0。
启用 OAuth 2.0 身份验证
要在 Apache APISIX 中配置 OAuth 2.0 身份验证:
- 启用
authz-keycloak插件。 - 设置你的 OAuth 2.0 提供商(本例中为 Keycloak)。
- 定义身份验证和授权端点。
1{
2 "route": {
3 "uri": "/secure-api",
4 "plugins": {
5 "authz-keycloak": {
6 "token_endpoint": "https://auth.example.com/realms/demo/protocol/openid-connect/token",
7 "authorization_endpoint": "https://auth.example.com/realms/demo/protocol/openid-connect/auth",
8 "client_id": "your-client-id",
9 "client_secret": "your-client-secret",
10 "scopes": ["read", "write"]
11 }
12 },
13 "upstream": {
14 "type": "roundrobin",
15 "nodes": {
16 "backend-service:80": 1
17 }
18 }
19 }
20}工作原理
- API 客户端从 OAuth 提供商获取访问令牌。
- 客户端在 API 请求中附带该令牌(例如,
Authorization: Bearer <token>)。 - Apache APISIX 会在将请求转发至后端服务之前验证该令牌。
2. 在 Apache APISIX 中使用 JWT 身份验证
JWT (JSON Web Token) 身份验证支持无状态的令牌验证,无需请求外部服务器。
启用 JWT 身份验证
- 启用
jwt-auth插件。 - 配置用于签名 JWT 的密钥。
- 为身份验证定义特定于用户的令牌。
1{
2 "consumer": {
3 "username": "api-user",
4 "plugins": {
5 "jwt-auth": {
6 "key": "api-user-key",
7 "secret": "super-secret-key",
8 "algorithm": "HS256"
9 }
10 }
11 }
12}JWT 令牌示例
使用 HS256 编码的 JWT 令牌示例:
1{
2 "alg": "HS256",
3 "typ": "JWT"
4}.
5{
6 "sub": "1234567890",
7 "name": "API User",
8 "iat": 1712012345,
9 "exp": 1712617145
10}.
11<signature>
工作原理
- 客户端发送请求,并在
Authorization请求头中附带 JWT 令牌。 - Apache APISIX 解码该令牌并验证其签名。
- 如果验证通过,则将请求转发至后端服务。
3. 在 Apache APISIX 中使用 OIDC 身份验证
OIDC 扩展了 OAuth 2.0 的功能,增加了身份验证机制,允许使用外部 IdP 进行身份验证。
启用 OIDC 身份验证
- 启用
openid-connect插件。 - 配置 OIDC 提供商的发现端点。
1{
2 "route": {
3 "uri": "/oidc-secure",
4 "plugins": {
5 "openid-connect": {
6 "client_id": "your-client-id",
7 "client_secret": "your-client-secret",
8 "discovery": "https://auth.example.com/.well-known/openid-configuration",
9 "scope": "openid profile email"
10 }
11 },
12 "upstream": {
13 "type": "roundrobin",
14 "nodes": {
15 "backend-service:80": 1
16 }
17 }
18 }
19}工作原理
- 客户端会被重定向至 OIDC 提供商进行身份验证。
- 身份验证完成后,提供商会返回一个 ID 令牌。
- Apache APISIX 会验证该令牌并提取用户身份声明。
Apache APISIX API 身份验证最佳实践
- 使用 OAuth 2.0 和 OIDC 进行基于身份的身份验证。
- 启用 JWT 验证 以减少对外部身份验证服务器的调用频率。
- 配置限流,对身份验证端点进行流量控制。
- 监控身份验证日志,以便进行安全审计。
- 使用 mTLS(双向 TLS) 来保障令牌验证请求的安全。

总结
Apache APISIX 提供了一个灵活的身份验证框架,支持集成 OAuth 2.0、JWT 和 OIDC。通过实施这些身份验证机制,企业可以在保障无缝用户体验的同时,提升 API 的安全性。
常见问题 (FAQ)
1. Apache APISIX 可以作为 OAuth 2.0 授权服务器吗?
答:不可以。Apache APISIX 仅负责验证 OAuth 令牌,你需要一个外部的授权服务器(例如 Keycloak、Auth0)。
2. Apache APISIX 如何验证 JWT 令牌?
答:APISIX 会解码 JWT 并使用预定义的密钥或公钥来验证签名。
3. 必须使用 OpenID Connect 进行身份验证吗?
答:不是必须的,但是 OIDC 提供了身份信息,这在许多身份验证场景中非常有用。
