
# 配置远程鉴权防止资源被恶意盗用
华为云CDN支持远程鉴权功能，即：当用户向CDN节点请求资源时，CDN将用户请求转发到您指定的鉴权服务器，CDN根据鉴权服务器返回的结果判断是否给用户返回资源。
#### 背景信息
远程鉴权功能类似URL鉴权，区别如下：
**URL鉴权**：鉴权由CDN节点完成。
**远程鉴权**：CDN节点转发用户请求到您指定的鉴权服务器，由鉴权服务器完成鉴权功能。
远程鉴权用户请求流程如下：
图1远程鉴权流程   
![](https://support.huaweicloud.com/usermanual-cdn/zh-cn_image_0000001291853490.png)
表1步骤说明 
| 步骤 | 说明                             |
|:---|:---|
| ①  | 用户携带鉴权参数访问CDN节点。               |
| ②  | CDN将用户请求转发至远程鉴权服务器。            |
| ③  | 远程鉴权服务器完成鉴权操作，给CDN节点返回响应状态码。   |
| ④  | CDN节点根据接收到的状态码判断是否给用户返回所请求的资源。 |
   
#### 注意事项
- 远程鉴权功能默认关闭。
- 后台有特殊配置的域名，暂不支持使用远程鉴权功能。
- 客户端请求鉴权不通过被拦截时，消耗了节点资源，因此会产生少量流量/带宽费用，全站加速的域名还会产生请求数费用。
 
#### 操作步骤
1. 登录[CDN控制台](https://console.huaweicloud.com/cdn/?locale=zh-cn#/cdn/overview)。
2. 在左侧菜单栏中，选择"域名管理"。
3. 在域名列表中，单击需要修改的域名，进入"概览"页面。
4. 选择"访问控制"页签，单击"远程鉴权配置"后的![](https://support.huaweicloud.com/usermanual-cdn/zh-cn_image_0000002558449961.png)按钮，进入配置弹窗。
   图2配置远程鉴权   
   ![](https://support.huaweicloud.com/usermanual-cdn/zh-cn_image_0000002324322804.png "点击放大")
   表2参数说明 
   | 参数        | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 示例                                                               |
   |:---|:---|:---|
   | 鉴权服务器地址   | 可访问的服务器地址。 - 输入的URL必须带有"http"或"https"。  - 不能是localhost或127.0.0.1这类本地地址。  - 不能是CDN的加速域名。  - 远程鉴权服务器默认为80/443端口，如需修改，请提交工单申请。 说明： 配置远程鉴权后，客户端每次请求都会转发到鉴权服务器，请注意考虑请求量较大时服务器的性能和压力。    | https://example.com/auth                                         |
   | 请求方法      | 鉴权服务器支持的请求方法，支持GET、POST、HEAD。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | GET                                                              |
   | 鉴权文件类型    | - 所有文件类型：所有文件均参与鉴权。  - 指定文件后缀：指定类型的文件参与鉴权，多个后缀用"\|"分隔，示例：jpg\|MP4。 - 支持数字0-9、字符a-z、A-Z，且字符总数不超过512。    - 文件类型不区分大小写，即：jpg和JPG代表同一种文件类型。                                                                        | 所有文件类型                                                           |
   | 保留参数设置    | 设置用户请求中需要参与鉴权的参数，可选保留所有URL参数、忽略所有URL参数、保留指定URL参数。 - 参数填写规范：不区分大小写，多个参数用"\|"分隔。                                                                                                                                                                                                                                                                                                                          | 保留所有URL参数                                                        |
   | 自定义URL参数  | 设置CDN节点转发用户请求到远程鉴权服务器时需添加的参数，最多可添加10条参数。您可以选择[预设参数]或自定义参数（参数值不区分大小写）。 - **自定义**：不支持变量，采用字符串形式下发。  - **选择参数**：选择预设的参数或自定义参数，取值支持配置变量。                                                                                                                                                                               | 选择参数：http_host 取值：$http_host         |
   | 保留请求头设置   | 设置用户请求中参与鉴权请求头，可选保留所有请求头参数、保留指定请求头参数、忽略所有请求头参数。 参数填写规范：不区分大小写，多个参数用"\|"分隔。                                                                                                                                                                                                                                                                                                                                                                                                                              | 保留所有请求头参数                                                        |
   | 自定义请求头参数  | 设置CDN节点转发用户请求到远程鉴权服务器时需要添加的请求头，最多可添加10个请求头。可以选择[系统预设的请求头]，也可以自定义请求头（参数值不区分大小写）。 - **自定义**：不支持变量，采用字符串形式下发。  - **选择参数**：选择预设的参数或自定义参数，取值支持配置预设变量。                                                                                                                                                              | 选择参数：http_referer 取值：$http_referer |
   | 鉴权成功状态码   | 设置鉴权成功时远程鉴权服务器返回给CDN节点的状态码。取值范围：2xx/3xx。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 200                                                              |
   | 鉴权失败状态码   | 设置鉴权失败时远程鉴权服务器返回给CDN节点的状态码。取值范围：4xx/5xx。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 403                                                              |
   | 响应自定义状态码  | 设置鉴权失败时CDN节点返回给用户的状态码。取值范围：2xx/3xx/4xx/5xx。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 403                                                              |
   | 鉴权超时时间    | 设置从CDN转发鉴权请求开始，到CDN节点收到远程鉴权服务器返回的结果为止的时间。单位为毫秒，值为0或50\~3000。                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 60                                                               |
   | 鉴权超时之后的动作 | 设置鉴权超时后，CDN节点如何处理用户请求。 - 通过：鉴权超时后允许用户请求，返回对应的资源。  - 拒绝：鉴权超时后拒绝用户请求，返回配置的**响应自定义状态码**给用户。                                                                                                                                                                                                                                                   | 拒绝                                                               |
      
    表3预设参数 
   | 变量名                   | 变量含义                    | 说明                   |
   |:---|:---|:---|
   | $http_host            | 请求头中的Host值。             | 只有客户端请求携带这些值时才可以获取到。 |
   | $http_user_agent      | 请求头中的User-Agent值。       | 只有客户端请求携带这些值时才可以获取到。 |
   | $http_referer         | 请求头中的Referer值。          | 只有客户端请求携带这些值时才可以获取到。 |
   | $http_x_forwarded_for | 请求头中的X-Forwarded-For值。  | 只有客户端请求携带这些值时才可以获取到。 |
   | $http_content_type    | 请求头中的Content-Type值。     | 只有客户端请求携带这些值时才可以获取到。 |
   | $remote_addr          | 请求的Client IP信息。         | -                    |
   | $scheme               | 请求的协议类型。                | -                    |
   | $server_protocol      | 请求的协议版本。                | -                    |
   | $request_uri          | uri+'?'+args的内容。        | -                    |
   | $uri                  | 请求的原始URI。               | -                    |
   | $args                 | 请求的query string，不包含'?'。 | -                    |
   | $request_method       | 请求方法。                   | -                    |
      
   
5. 根据参数提示填写相关参数，单击"确定"完成配置。
6. （可选）关闭远程鉴权配置。
   - 关闭"状态"开关即可关闭远程鉴权配置，此时所有配置将被清空，下次启用远程鉴权功能时需要重新配置相关参数。
    
 
#### 配置示例
域名example.com开启了远程鉴权，配置请见[图3]。
- 客户端原始请求URL：https://example.com/folder01/test.txt?key=\*\*\*，原始请求中携带Header：test=123。
- CDN转发给远程鉴权服务器的URL为：GET https://192.168.9.1/remoteauth?key=\*\*\*，CDN转发给远程鉴权服务器的请求包含header：test=123。
- 可能的鉴权结果：
  - 结果1：鉴权成功，CDN节点与用户开始正常的缓存数据访问交互。
  
  - 结果2：鉴权失败，CDN节点返回403状态码给用户。
  
  - 结果3：鉴权超时，CDN节点执行鉴权超时动作，放行用户请求。
   
图3远程鉴权   
![](https://support.huaweicloud.com/usermanual-cdn/zh-cn_image_0000002007882797.png)
#### 相关文档
调用接口修改远程鉴权请参考：[修改域名全量配置接口 - UpdateDomainFullConfig](https://support.huaweicloud.com/api-cdn/UpdateDomainFullConfig.html)。
