1. 概述

访问控制插件可以根据请求参数或上下文,来执行条件判断,用于过滤不希望传递到后端的请求,参考参数与条件表达式文档来了解如何定义参数和使用条件表达式。

2. 配置说明

在这个例子中假设我们的API请求Path为/{userId}/..., API使用JWT认证,JWT中有userId和userType两个claim, 我们这个插件的校验条件为:

  • 当userType=admin时,允许所有的路径。
  • 当userType=user时,仅允许/{userId}路径一致的请求。
---
#
# 在这个例子中假设我们的API请求Path为`/{userId}/...`,
# API使用JWT认证,JWT中有userId和userType两个claim
# 我们这个插件的校验条件为
# - 当userType=admin时,允许所有的路径,
# - 当userType=user时,仅允许/{userId}路径一致的请求
parameters:
  userId: "Token:userId"
  userType: "Token:userType"
  pathUserId: "path:userId"
#
# 关于Rules的处理规则,依次演算条件,按照返回值为`true`或者`false`,处理`ifTrue`的逻辑或`ifFalse`的结果
# `ALLOW`会直接判断为成功,而`DENY`则会直接返回错误代码给客户端,
# 如果没有触发`ALLOW`或`DENY`逻辑,则执行下一条
rules:
  - name: admin
    condition: "$userType = 'admin'"
    ifTrue: "ALLOW"
  - name: user
    condition: "$userId = $pathUserId"
    ifFalse: "DENY"
    statusCode: 403
    errorMessage: "Path not match ${userId} vs /${pathUserId}"
    responseHeaders:
      Content-Type: application/xml
    responseBody: 
      <Reason>Path not match ${userId} vs /${pathUserId}</Reason>

3. 相关错误码

错误代码 Http状态码 Message 描述
A403AC 403 Access Control Forbidden by ${RuleName} 被授权控制插件阻止。

4. 使用限制

  • 参数定义个数不超过16个。
  • 单个表达式的字符数不超过512个字符。
  • 插件配置大小限制为16380字符的文本。
  • 最大允许的rules条数为16条。