-
Notifications
You must be signed in to change notification settings - Fork 224
api security policy authentication
微服务应用中服务越来越多,调用关系越来越复杂,有些特殊的微服务为了保证安全调用或者特殊情况下仅保证某些API可调用,因此需要针对特定的API接口作鉴权调用,下面介绍如何使用API安全策略鉴权确保服务安全调用。
首先确认token校验是否开启,配置信息如下,默认值是true开启token校验:
spring:
cloud:
servicecomb:
webmvc:
publicKey:
tokenCheckEnabled: true
认证场景:
1、开启token校验时,通过header或者上下文获取token信息,校验并解析获取服务id、实例id及公钥进行当前客户端身份校验;
2、关闭token校验时,header里面有serviceName信息时,以serviceName作为身份信息通过身份认证;
3、关闭token校验时,header里面无serviceName信息时,校验并解析获取服务id、实例id及公钥进行当前客户端身份校验。
4、如果是校验CSE应用网关的token且注册中心为Nacos(Servicecomb注册中心暂时不支持)时,则需要开启跨Group调用,配置如下:
spring:
cloud:
servicecomb:
cross-group:
enabled: true
service-group-mappings:
cse-app-gateway: CSE_GATEWAY
- 服务端开启校验配置开关
spring:
cloud:
servicecomb:
webmvc:
publicKey:
securityPolicyEnabled: true
该配置开启后,会对上游客户端进行身份校验,需要在服务启动时加载。
- 客户端、微服务网关构建身份信息配置开关
spring:
cloud:
servicecomb:
webmvc:
publicKey:
consumerEnabled: true
该配置开启后,请求服务端时,会将本服务的服务id、实例id构建生成token,放入请求上下文中,标识当前客户端身份信息,需要在服务启动时加载。
注意:在serviceA-》serviceB-》serviceC调用链上,serviceB既作为serviceA的服务端,又作为serviceC的客户端,如果serviceB只开启校验配置,那么serviceC只能获取到serviceA的身份信息,所以当serviceC需要校验serviceB的身份信息时,serviceB还要同时开启构建身份信息配置,即serviceB需要配置如下配置信息:
spring:
cloud:
servicecomb:
webmvc:
publicKey:
securityPolicyEnabled: true
consumerEnabled: true
- 设置API鉴权规则
spring:
cloud:
servicecomb:
webmvc:
publicKey:
acls:
app: canary # 应用名称
mode: permissive # 模式,permissive:宽容模式;enforcing:强制模式
provider: account # 服务端名称
action:
allow: # 白名单策略
- id: 1 # 策略编号
method: GET # 方法名称
consumer: allowService # 客户端名称
uri: /checkTokenSecurity # 调用接口uri
deny: # 黑名单策略
- id: 1
method: GET
consumer: denyService
uri: /checkTokenProvider
策略分为宽容模式(permissive)和强制模式(enforcing),宽容模式下未匹配白名单信息或者匹配黑名单信息时,打印告警信息[autoauthz unauthorized request]...,强制模式下请求拒绝。
上述策略为宽容模式策略,主要逻辑: 1、如果请求方法为GET、客户端名称为allowService及接口名称为/checkTokenSecurity,符合白名单规则,再判断黑名单策略,如果方法、客户端名称、接口也能匹配,则打印告警信息,请求通过; 2、如果请求方法、客户端名称、接口名称有一个不匹配白名单策略,打印告警信息,请求通过;
如果策略为强制模式策略,逻辑如下: 1、如果请求方法为GET、客户端名称为allowService及接口名称为/checkTokenSecurity,符合白名单规则,再判断黑名单策略,如果方法、客户端名称、接口也能匹配,请求不通过; 2、如果请求方法、客户端名称、接口名称有一个不匹配白名单策略,请求不通过。
uri支持前缀(xxx/)、后缀(/xxx)、精确三种匹配规则。
微服务中某些接口是仅内部调用或者服务健康检测使用,比如容器部署时探活健康检测接口、服务状态接口等,这些接口作为服务健康检测时需要开放白名单,不作身份验证、安全策略校验等校验。
配置信息:
spring:
cloud:
servicecomb:
webmvc:
publicKey:
apiPathWhitelist: '/api/white,/white/*,*/white'
多个API间使用“,”隔开,每个api支持前缀(xxx/)、后缀(/xxx)、精确三种匹配规则。
-
版本要求:1.11.4-2021.0.x/1.11.4-2022.0.x及以上版本。
-
设置的黑名单、白名单规则是同时生效的。
-
集成Spring Cloud Huawei以后,默认集成了黑白名单校验模块
spring-cloud-starter-huawei-governance
,只需要通过配置开启具体的黑白名单校验规则。
-
使用Spring Cloud Huawei功能
-
使用服务治理
-
生态集成
-
迁移改造问题
-
配置参考
-
优秀实践
-
常见问题