
# 配置API的第三方认证
您可通过配置第三方认证策略，将自定义鉴权服务接入API网关。网关在调用后端服务前，会先请求您的鉴权服务进行认证，只有收到成功响应后才会继续执行后续操作。
![](https://support.huaweicloud.com/usermanual-apig/public_sys-resources/note_3.0-zh-cn.png)
如果此策略在当前实例中不支持，可[提交工单](https://support.huaweicloud.com/usermanual-ticket/zh-cn_topic_0127038618.html)升级实例到最新版本。
第三方认证原理图如下，第三方认证策略绑定API后，您可以参考[调用APIG开放的API](https://support.huaweicloud.com/usermanual-apig/apig_03_0046.html)调用。
![](https://support.huaweicloud.com/usermanual-apig/zh-cn_image_0000001560598294.png "点击放大")
#### 前提条件
- 同一个环境中，一个API只能被一个第三方认证策略绑定，但一个第三方认证策略可以绑定多个API。
- 策略和API本身相互独立，只有为API绑定策略后，策略才对API生效。为API绑定策略时需指定发布环境，策略只对指定环境上的API生效。
- API的下线操作不影响策略的绑定关系，再次发布后仍然会带有下线前绑定的策略。
- 如果策略与API有绑定关系，则策略无法执行删除操作。
 
#### 创建第三方认证策略
1. 进入[API网关控制台](https://console.huaweicloud.com/apig2/#/overview)页面。
2. 根据实际业务在左侧导航栏上方选择实例。

3. 在左侧导航栏选择"API管理 \> API策略"。
4. 在"策略管理"页面，单击"创建策略"。
5. 在"选择策略类型"弹窗中，选择"插件策略 \> 第三方认证"。
6. 在"创建策略"弹窗中，根据下表参数说明，配置策略信息。 
   表1第三方认证参数说明 
   | 参数         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   |:---|:---|
   | 策略名称       | 填写策略的名称，根据业务规划自定义。建议您按照一定的命名规则填写策略名称，方便您快速识别和查找。 支持中文、英文、数字、下划线，且只能以英文或中文开头，长度为3\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 策略类型       | 固定为"第三方认证"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 描述         | 填写策略的描述信息。长度为1\~255个字符。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 策略内容       | 策略的配置内容，支持表单配置和脚本配置两种方式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 负载通道       | 是否使用负载通道作为第三方接口的鉴权服务。 - 选择"使用"时，配置鉴权服务的[负载通道](https://support.huaweicloud.com/usermanual-apig/apig_03_0040.html)。  - 选择"不使用"时，配置鉴权服务的访问地址。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 后端URL      | - 请求方法 支持GET、POST、PUT、HEAD请求方法。   - 请求协议 HTTP或HTTPS，传输重要或敏感数据时推荐使用HTTPS。   - 负载通道（可选） **仅在"使用"** **负载通道时，需要设置**。选择已创建的负载通道名称，如果没有可选的负载通道，您也可以单击"新建负载通道"创建。   - 后端服务地址（可选） **仅在不使用负载通道时，需要设置**。 填写鉴权服务的访问地址，格式："主机:端口"。主机为鉴权服务的访问IP地址/域名，未指定端口时，HTTP协议默认使用80端口，HTTPS协议默认使用443端口。 **目前仅支持IPv4地址。**   - 路径 鉴权服务的路径，即服务的url。    |
   | 后端超时（ms）   | 鉴权服务请求的超时时间。超时时间不超过后端响应超时时间上限，超时时间上限可在API网关控制台的"配置参数"页面中查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 自定义host头域  | **仅在使用负载通道时配置**。 自定义后端服务请求中的Host头域，默认使用请求中原始的host头域。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | 防暴力拦截阈值    | 当源IP访问在5分钟内进行第三方认证失败的次数达到此处配置的阈值时，将触发源IP请求拦截，在这5分钟后解除请求拦截。 例如，5分钟内，源IP访问在第三分钟进行第三方认证失败的次数达到此处配置的阈值，触发源IP请求拦截，再过2分钟解除请求拦截。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 身份来源       | 将从API原始请求中获取此处配置的参数进行第三方鉴权接口鉴权（最大支持10个header参数和10个query参数）。身份来源信息为空时，携带API原始请求的请求参数（header参数和query参数）调用第三方鉴权接口进行鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | 宽松模式       | 开关开启后，当鉴权服务不可用（与鉴权服务建立连接失败或者鉴权服务返回5*xx*）时，API网关仍然接受客户端请求。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 允许携带原始请求体  | 开关开启后，将携带API原始请求体调用鉴权接口鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 请求体大小（字节）  | **仅在开启"允许携带原始请求体"时配置**。 请求体大小不能超过实例允许的最大请求体大小。实例的最大请求体大小可在API网关控制台"配置参数"页面中查看。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 允许携带原始请求路径 | 开关开启后，将API原始请求路径拼接到鉴权接口路径之后调用鉴权接口鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 直接返回鉴权响应   | 开关开启后，鉴权失败时，将直接返回鉴权服务的响应。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 允许携带的响应头部  | 鉴权成功时，原始请求将从鉴权服务返回的响应头中获取此处配置的头部，传到业务后端。 最大支持配置10个头部。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 简易鉴权模式     | 开关开启后，鉴权服务返回状态码"2*xx*"时，表示认证通过。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 鉴权结果匹配     | **仅在"简易鉴权模式"关闭后可配置**。 根据鉴权服务返回的响应头中的参数名和参数值进行校验，响应头中存在此处配置的参数名，并且参数值相等则认证通过。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 黑白名单配置     | 开关开启后，原始API请求匹配黑/白名单规则将进行/不进行第三方认证鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 规则类型       | - 白名单规则 如果原始API请求匹配白名单规则，将不进行第三方认证鉴权。   - 黑名单规则 如果原始API请求匹配黑名单规则，将进行第三方认证鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 定义参数       | 定义用于规则的参数。**建议不要设置敏感信息，以防泄露。** - 参数位置：用于规则匹配的参数位置。 - path：API请求的URI，系统默认配置。  - method：API请求方法，系统默认配置。  - header：请求头的key值。  - query：QueryString的key值。  - system：系统参数。    - 参数：用于判断与规则中的参数值是否匹配。                                                                                                                                                                                                                                                                         |
   | 定义规则       | 定义用于规则的判断条件。 单击"添加规则"，编辑规则名称和规则条件。在"条件表达式"弹窗中，选择"定义参数"中的参数名和判断条件，以及输入参数值。**建议不要设置敏感信息，以防泄露。** - =为等于  - !=为不等于  - pattern为正则表达式  - enum为枚举值，多个参数值之间用英文逗号分隔                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
      
   
   
7. 单击"确定"。 
   - 在策略列表中显示已创建的策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
   
   
   
   
8. 策略创建后，您还需要[为策略绑定API]，才能使策略对API生效。
   
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
   
 
#### 脚本配置示例
```
{
  "auth_request": {
    "method": "GET",
    "protocol": "HTTPS",
    "url_domain": "192.168.10.10",
    "timeout": 5000,
    "path": "/",
    "vpc_channel_enabled": false,
    "vpc_channel_info": null
  },
  "custom_forbid_limit": 100,
  "carry_body": {
    "enabled": true,
    "max_body_size": 1000
  },
  "auth_downgrade_enabled": true,
  "carry_path_enabled": true,
  "return_resp_body_enabled": false,
  "carry_resp_headers": [],
  "simple_auth_mode_enabled": true,
  "match_auth": null,
  "rule_enabled": false,
  "rule_type": "allow"
}
```
 #### 为策略绑定API
1. 单击策略名称，进入策略详情。
2. 在API列表区域选择环境后，单击"绑定API"。
3. 筛选API分组以及发布环境，勾选所需的API。 
   支持通过API名称或标签筛选API，标签为创建API时定义的标签。
   
   
4. 单击"确定"，绑定完成。 
   - 如果单个API不需要绑定此策略，单击API所在行的"解绑"。
   
   - 如果批量API不需要绑定此策略，则勾选待解绑的API，单击列表上方"解绑"。最多同时解绑1000个API。
   
   
   
   
 
#### 相关文档
如果您希望通过API创建第三方认证策略，请参考[创建插件](https://support.huaweicloud.com/api-apig/CreatePlugin.html)。
