Kong 认证与鉴权配置指南
Kong 提供了多种认证和鉴权机制来保护您的 API 服务。以下是 Kong 的主要认证鉴权方式及其配置方法。
1. 基本认证 (Basic Authentication)
启用基本认证插件
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=basic-auth" \
--data "config.hide_credentials=true"
创建消费者
curl -X POST http://localhost:8001/consumers \
--data "username=johndoe"
添加凭证
curl -X POST http://localhost:8001/consumers/johndoe/basic-auth \
--data "username=john" \
--data "password=doe"
测试请求
curl -i -X GET http://localhost:8000/{route-path} \
-H "Authorization: Basic $(echo -n 'john:doe' | base64)"
2. JWT 认证 (JSON Web Tokens)
启用 JWT 插件
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=jwt" \
--data "config.claims_to_verify=exp" \
--data "config.key_claim_name=kid"
创建消费者
curl -X POST http://localhost:8001/consumers \
--data "username=jwt-user"
生成 JWT 凭证
curl -X POST http://localhost:8001/consumers/jwt-user/jwt
使用 JWT 访问
curl -i -X GET http://localhost:8000/{route-path} \
-H "Authorization: Bearer <JWT_TOKEN>"
3. OAuth2 认证
启用 OAuth2 插件
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=oauth2" \
--data "config.enable_authorization_code=true" \
--data "config.enable_client_credentials=true" \
--data "config.mandatory_scope=true" \
--data "config.scopes=email,phone,address" \
--data "config.token_expiration=7200"
创建消费者
curl -X POST http://localhost:8001/consumers \
--data "username=oauth2-user"
创建 OAuth2 应用
curl -X POST http://localhost:8001/consumers/oauth2-user/oauth2 \
--data "name=MyApp" \
--data "redirect_uris=http://myapp.com/callback" \
--data "client_id=CLIENT_ID" \
--data "client_secret=CLIENT_SECRET"
获取访问令牌
curl -X POST http://localhost:8000/{route-path}/oauth2/token \
--data "grant_type=client_credentials" \
--data "client_id=CLIENT_ID" \
--data "client_secret=CLIENT_SECRET" \
--data "scope=email"
4. Keycloak 集成 (OpenID Connect)
启用 OIDC 插件
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=openid-connect" \
--data "config.issuer=https://keycloak.example.com/auth/realms/myrealm" \
--data "config.client_id=CLIENT_ID" \
--data "config.client_secret=CLIENT_SECRET" \
--data "config.auth_methods=authorization_code,bearer" \
--data "config.scopes=openid,profile,email" \
--data "config.redirect_uri=https://myapp.com/callback"
5. ACL 访问控制
启用 ACL 插件
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=acl" \
--data "config.allow=group1,group2" \
--data "config.hide_groups_header=true"
为消费者添加 ACL 组
curl -X POST http://localhost:8001/consumers/{consumer}/acls \
--data "group=group1"
6. 组合认证策略
Kong 支持多种认证方式的组合使用:
# 启用基本认证
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=basic-auth"
# 启用 JWT 认证
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=jwt" \
--data "config.anonymous=<anonymous-consumer-id>"
7. 高级配置技巧
匿名访问控制
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=key-auth" \
--data "config.anonymous=<anonymous-consumer-id>"
跨域认证 (CORS)
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=cors" \
--data "config.origins=*" \
--data "config.methods=GET,POST" \
--data "config.headers=Accept,Authorization" \
--data "config.credentials=true"
速率限制保护认证端点
curl -X POST http://localhost:8001/services/{service}/plugins \
--data "name=rate-limiting" \
--data "config.minute=5" \
--data "config.policy=local"
8. 生产环境最佳实践
- 使用 HTTPS:所有认证流量必须加密
- 定期轮换密钥:特别是 JWT 签名密钥和 OAuth2 密钥
- 最小权限原则:只授予必要的权限
- 监控认证尝试:检测暴力破解行为
- 结合 WAF:使用 Web 应用防火墙增强保护
- 日志审计:记录所有认证相关活动
9. 故障排除
常见问题1:认证失败
- 检查消费者是否已创建
- 验证凭证是否正确
- 检查插件配置是否正确
- 查看 Kong 错误日志
常见问题2:JWT 过期
- 检查令牌有效期
- 验证签名算法是否匹配
- 确认密钥是否正确
常见问题3:OAuth2 回调问题
- 检查 redirect_uri 是否匹配
- 验证客户端 ID 和密钥
- 确保授权范围正确
通过合理配置这些认证机制,您可以构建一个安全可靠的 API 网关系统。
No Comments