
# 配置API的第三方认证
ROMA Connect支持通过插件策略的方式，为API提供灵活的扩展能力。第三方认证策略提供调用第三方认证服务的能力，为API的访问进行认证鉴权。用户在调用API时，ROMA Connect先调用第三方认证服务进行认证，认证通过后再继续调用后端服务。
插件策略和API本身相互独立，只有为API绑定插件策略后，插件策略才对API生效。为API绑定插件策略时需指定发布环境，插件策略只对指定环境上的API生效。
第三方认证原理图如下，第三方认证策略绑定API后，您可以参考[直接调用APIC开放的API](https://support.huaweicloud.com/usermanual-roma/roma_03_2123.html)调用。
![](https://support.huaweicloud.com/usermanual-roma/zh-cn_image_0000002581395718.png "点击放大")
#### 约束与限制
用户在调用绑定了第三方认证策略的API时，API会先进行自身的认证鉴权，然后再进行第三方认证鉴权。
#### 创建第三方认证策略
1. 登录[ROMA Connect控制台](https://console.huaweicloud.com/roma3)，在左侧导航栏选择"资源管理"，在实例页面单击实例，进入实例控制台。
2. 在左侧的导航栏选择"服务集成 APIC \> API策略"，在"策略管理"页签下单击"创建策略"。
3. 在选择策略类型弹窗中选择"插件策略 \> 第三方认证"。
4. 在配置策略弹窗中配置插件策略信息。
   表1策略配置 
   | 参数         | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   |:---|:---|
   | 策略名称       | 填写策略的名称，根据规划自定义。建议您按照一定的命名规则填写策略名称，方便您快速识别和查找。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 策略类型       | 固定为"第三方认证"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 可见范围       | 选择策略的可见范围。 - 集成应用：策略归属某个集成应用，仅拥有该集成应用权限的用户可查看和使用该策略。  - 全局：当前实例的所有用户都可查看和使用该策略。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 集成应用       | **仅当"可见范围"选择"集成应用"时需要配置。** 选择策略所属的集成应用。若没有可用的集成应用，可单击右侧的"新建集成应用"，创建一个集成应用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 描述         | 填写策略的描述信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   | 策略内容：支持表单模式和脚本模式两种方式，脚本模式配置请参见[脚本配置示例]。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                ||
   | 负载通道       | 是否使用负载通道访问第三方鉴权服务。若选择"使用"，您需要提前[创建负载通道](https://support.huaweicloud.com/usermanual-roma/roma_03_2104.html)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 后端URL      | 配置第三方认证服务的URL。 - 请求方法：选择第三方认证服务的请求方法。  - 请求协议：选择第三方认证服务使用的请求协议，传输重要或敏感数据时推荐使用HTTPS。  - 后端服务地址：**仅当"负载通道"选择"不使用"时需要配置。**填写第三方认证服务的访问地址，格式为"主机:端口"。主机为第三方认证服务的访问IP或域名，未指定端口时，HTTP协议默认使用80端口，HTTPS协议默认使用443端口。  - 负载通道：**仅当"负载通道"选择"使用"时需要配置。**选择访问第三方认证服务所使用的负载通道。  - 路径：填写第三方认证服务的请求路径，格式如：/auth。                                                                                                                                                                           |
   | 后端超时 (ms)  | 第三方认证服务的请求超时时间，默认为5000ms。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 自定义host头域  | **仅当"负载通道"选择"使用"时可配置。** 自定义第三方认证服务请求中的Host头域。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 防暴力拦截阈值    | 当5分钟内，同一源IP访问API进行第三方认证失败的次数达到此处配置的阈值时，将触发源IP请求拦截，并在当前统计周期后解除请求拦截。 例如，5分钟内，同一源IP访问API，在第3分钟时第三方认证失败的次数达到此处配置的阈值，触发源IP请求拦截。再过2分钟当前统计周期结束，解除请求拦截。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 身份来源       | 添加API原始请求中用于第三方认证的请求参数，支持添加Header参数和Query参数。身份来源信息为空时，携带API原始请求中的所有请求参数（header参数和query参数）调用第三方认证服务。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
   | 宽松模式       | 开启后，当第三方认证服务不可用（与鉴权服务建立连接失败或者鉴权服务返回5xx响应）时，ROMA Connect仍然接受客户端请求。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 允许携带原始请求体  | 开启后，将携带API原始请求体调用第三方认证服务。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 请求体大小（字节）  | **仅当"允许携带原始请求体"开启时可配置。** 调用第三方认证服务的请求体大小。请求体大小不能超过实例允许的最大请求体大小，可在[配置参数](https://support.huaweicloud.com/usermanual-roma/roma_03_0012.html)中查看"request_body_size"参数的设置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | 允许携带原始请求路径 | 开启后，将API原始请求路径拼接到第三方认证服务的调用路径之后，再调用第三方认证服务。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | 直接返回鉴权响应   | 开启后，第三方认证鉴权失败时，将直接返回第三方认证服务的响应。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | 允许携带的响应头部  | 鉴权成功时，将从第三方认证服务返回的响应头中获取此处配置的响应头信息加到原始请求中，传递到API的后端服务。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 简易鉴权模式     | 开启后，鉴权服务返回状态码"2xx"响应时，即表示认证通过。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
   | 鉴权结果匹配     | **仅当"简易鉴权模式"关闭时可配置。** 根据第三方认证服务返回的响应头信息进行校验。如果响应头中存在此处配置的参数名，且参数名对应的参数值一致，则表示认证通过。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 黑白名单配置     | 开启后，如果原始API请求信息匹配黑名单规则将进行第三方认证鉴权，匹配白名单规则将不进行第三方认证鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 规则类型       | **仅当"黑白名单配置"开启时需配置。** - 白名单规则：如果原始API请求信息匹配白名单规则，将不进行第三方认证鉴权。  - 黑名单规则：如果原始API请求信息匹配黑名单规则，将进行第三方认证鉴权。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | 定义参数       | **仅当"黑白名单配置"开启时可配置。** 定义用于规则匹配的参数。单击"添加参数"，添加用于规则匹配的参数。 说明： 建议不要设置敏感信息，以防泄露。 - 参数位置：参数在API请求中的位置。 - path：API请求的URI，已默认配置。  - method：API请求方法，已默认配置。  - header：API请求Header参数的第一个值。  - query：API请求Query参数的第一个值。  - system：系统参数。    - 参数：用作规则匹配的参数名。   |
   | 定义规则       | **仅当"黑白名单配置"开启时可配置。** 自定义黑白名单的匹配规则。单击"添加规则"，可添加规则，系统根据从上到下的顺序匹配规则。 说明： 建议不要设置敏感信息，以防泄露。 定义规则：单击"![](https://support.huaweicloud.com/usermanual-roma/zh-cn_image_0000001714856132.png)"编辑匹配条件表达式。若表达式数量大于等于3个，可通过"转子层级"对表达式进行分层设置。 - =：等于  - !=：不等于  - pattern：正则表达式  - enum：枚举值，多个参数值之间用英文逗号分隔                                                                                                                                                                        |
      
   
5. 单击"确定"，完成插件策略的创建。
   - 在策略列表中显示已创建的访问控制策略，表示策略创建成功。
   
   - 如果您需要复制已创建的策略，请在已创建策略的"操作"列中单击"克隆"配置参数即可。**克隆策略的名称不能与已创建的策略名称重复。**
    
6. 插件策略创建后，您还需要[为API绑定插件策略]，才能使插件策略对API生效。
   **策略的绑定、解绑、更新会实时生效，不需要重新发布API。**
   
 
 #### 为API绑定插件策略
1. 在"策略管理"页签右上角的过滤条件中选择"第三方认证"。
2. 在页面中单击策略的名称，进入策略详情页面。
3. 在"关联API"下选择要绑定API的环境，然后单击"绑定API"。
4. 在绑定API弹窗中，勾选要绑定策略的API。 您可以通过指定API分组和API名称，筛选所需API。
   
5. 单击"确定"，完成API与插件策略的绑定。
 
 #### 脚本配置示例
```
{
  "auth_request": {
    "method": "GET",
    "protocol": "HTTPS",
    "url_domain": "10.10.10.10",
    "timeout": 5000,
    "path": "/auth",
    "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"
}
```
