参数访问控制插件配置参考。
功能说明
param-access-control
插件实现了基于请求参数和上下文条件进行精确访问控制,可用于实现复杂的请求验证和访问管理场景。
运行属性
插件执行阶段:鉴权阶段。
插件执行优先级:310。
配置字段
参数 | 数据类型 | 填写要求 | 默认值 | 描述 |
parameters | object | 必填 | - | 定义需要使用的参数,支持从Header、Query、Path中提取。 |
rules | array of rule | 必填 | - | 定义判断规则和处理逻辑。 |
parameters
字段配置说明
参数 | 格式 | 描述 |
Header |
| 从请求头提取参数。 |
Query |
| 从查询参数提取参数。 |
Path |
| 从路径中提取第n段内容,序号从1开始。 |
Path |
| 获取完整路径。 |
rules
字段配置说明
参数 | 数据类型 | 填写要求 | 默认值 | 描述 |
name | string | 必填 | - | 规则名称。 |
condition | string | 必填 | - | 判断条件。 |
ifTrue | string | 选填 | - | 条件为真时的处理指令(ALLOW/DENY)。 |
ifFalse | string | 选填 | - | 条件为假时的处理指令(ALLOW/DENY)。 |
statusCode | number | 选填 | 403 | DENY时返回的HTTP状态码。 |
responseHeaders | object | 选填 | - | DENY时返回的响应头。 |
responseBody | string | 选填 | - | DENY时返回的响应体。 |
支持的运算符和函数
运算符/函数 | 描述 | 示例 |
== | 等于 |
|
!= | 不等于 |
|
> | 大于 |
|
>= | 大于等于 |
|
< | 小于 |
|
<= | 小于等于 |
|
contains | 包含子串 |
|
matches | 正则匹配 |
|
startsWith | 前缀匹配 |
|
endsWith | 后缀匹配 |
|
&& | 逻辑与 |
|
|| | 逻辑或 |
|
! | 逻辑非 |
|
配置示例
插件通过配置规则(rules)来控制请求访问,规则按照配置顺序依次执行直到遇到ALLOW或DENY指令。每个规则必须至少配置ifTrue或ifFalse其中之一,建议为DENY操作设置明确的状态码和响应信息。以下示例展示了常见的使用场景:
基于用户身份的访问控制
parameters:
userType: "Header:userType"
userId: "Path:1"
rules:
- name: admin-access
condition: "userType == 'admin'"
ifTrue: "ALLOW"
- name: user-access
condition: "userId == '123'"
ifFalse: "DENY"
statusCode: 403
responseBody: "Access Denied"
根据该配置,满足以下条件的请求将被允许:
# 管理员访问任意路径
curl http://example.com/any/path? -H "userType: admin"
# 用户访问自己的资源
curl http://example.com/123/profile
而以下请求将被拒绝:
# 用户访问他人资源
curl http://example.com/456/profile
基于API版本的访问控制
parameters:
apiVersion: "Header:Api-Version"
path: "Path"
rules:
- name: version-check
condition: "path.contains('/v2/') && apiVersion < '2.0'"
ifTrue: "DENY"
statusCode: 400
responseHeaders:
Content-Type: application/json
responseBody: '{"error": "Please upgrade to API version 2.0 or above"}'