如果您有自己的鉴权服务器,可以通过配置远程鉴权,将用户请求转发至您指定的鉴权服务器,由鉴权服务器对用户请求进行校验。
功能介绍
远程鉴权和URL鉴权的作用一样,都用于保护资源,让资源只被授权成功的用户访问,非授权用户将无法访问。这两个功能在技术实现方案上有如下差异:
- URL鉴权:用户把域名的鉴权规则下发给CDN节点,由CDN节点完成鉴权的整个数据交互流程。 
- 远程鉴权:用户有自己单独设置的鉴权服务器,CDN节点收到用户请求后,需要把用户请求转发给鉴权服务器完成鉴权,鉴权服务器由用户自主管理。 
远程鉴权功能的数据交互流程如下:
| 序号 | 交互说明 | 
| ① | 用户发起的资源访问请求到达CDN节点,请求中携带了鉴权参数。例如: 
 | 
| ② | CDN节点收到用户请求,将用户请求直接转发(或者经过指定的规则处理后转发)给鉴权服务器。例如: 
 | 
| ③ | 鉴权服务器根据用户请求中携带的鉴权参数给出鉴权结果,并返回给CDN节点。 | 
| ④ | CDN节点根据鉴权服务器返回的鉴权结果执行对应的动作,并返回对应的数据给用户。 鉴权结果举例说明如下: 
 | 
注意事项
- 配置远程鉴权后,鉴权失败的请求仍可访问到CDN节点,但会被CDN节点拒绝并返回403状态码,CDN日志中仍会记录客户端的请求记录。 
- 由于远程鉴权,将用户请求转发至您指定的鉴权服务器,由鉴权服务器对用户请求进行校验,因此在恶意请求被CDN节点拦截的同时,会产生少量的流量费用,如果客户端使用HTTPS协议访问,还会产生HTTPS请求数费用(因为拦截恶意请求的时候,也同时消耗了CDN节点的处理资源)。 
操作步骤
- 登录CDN控制台。 
- 在左侧导航栏,单击域名管理。 
- 在域名管理页面,找到目标域名,单击操作列的管理。 
- 在指定域名的左侧导航栏,单击访问控制。 
- 单击远程鉴权页签。 - 打开远程鉴权开关,根据界面提示,配置远程鉴权信息。 说明- 开启远程鉴权功能后,用户的每次请求都要转发给鉴权服务器处理,当请求访问量大时,需考虑鉴权服务器的压力和性能。 - 参数 - 说明 - 鉴权服务器地址 - 鉴权服务器对外可以访问的地址。系统会对您输入的鉴权服务器地址进行校验,包括格式校验和值校验。 - 格式要求 - 鉴权地址支持HTTP协议和HTTPS协议,格式请参考以下几种类型: - http://example.com/auth 
- https://example.com/auth 
- http://192.0.2.1/auth 
- https://192.0.2.1/auth 
 
- 值要求 - 值不能包含127.0.0.1和localhost,因为这类本地地址属于无效地址。 
 - 请求方法 - 鉴权服务器支持的请求方法。支持GET、HEAD和POST这三种请求方法,默认使用GET方法请求。 - 鉴权文件类型 - 所有文件类型:所有的文件类型都参与鉴权。 
- 指定文件类型:仅指定的文件类型参与鉴权。 - 指定文件类型时,如果您输入多个文件类型,多个文件类型用竖线(|)分隔,例如:mp4|flv。 
- 文件类型区分大小写,即.jpg和JPG是两种不同的文件类型。 
 
 - URL鉴权参数 - 保留参数设置 - 用于控制用户请求URL中需要参与鉴权的参数。可以选择保留所有参数、保留指定参数和删除所有URL参数。 - 保留指定参数时,多个参数用竖线(|)分隔,例如:user|token。 
- 参数区分大小写,即key和KEY是两种不同的参数。 
 - 添加自定义参数 - 为CDN节点转发给鉴权服务器的请求URL添加自定义参数。您可以自定义设置参数和取值,也可以直接使用CDN控制台上预设的变量。 - 自定义设置参数和取值时,要求如下: - 多个参数用竖线(|)分隔,例如:token=$arg_token|vendor=ali_cdn。 
- 参数值区分大小写,即key和KEY是两种不同的参数值。 
 
- 使用预设变量时,您可以提取变量的值添加到CDN转发给鉴权服务器的请求上。 - 例如,选择提取变量$http_host,则用户请求的URL地址会加上host=$http_host,此处的host表示用户请求头中的host值。变量名称与变量含义的介绍,请参见变量名称。 
 - 请求头鉴权参数 - 保留请求头设置 - 用于控制用户请求头中需要参与鉴权的参数。可以选择保留所有参数、保留指定参数和删除所有请求头参数。 - 保留指定参数时,多个请求头用竖线(|)分隔,例如:user_agent|referer|cookies。 
- 参数不区分大小写,即http_remote_addr和HTTP_Remote_Addr一样。 
 说明- 选择“保留所有参数”时,CDN节点默认会删除HOST头,如果您需要保留HOST头,可通过“保留指定参数”或者“添加自定义参数”来保留。CDN节点默认删除HOST头的原因是CDN节点转发给鉴权服务器的鉴权请求中携带的HOST头是加速域名,这可能会导致鉴权服务器无法识别鉴权请求,从而导致访问时返回404状态码,导致鉴权失败。 - 添加自定义参数 - 用于CDN节点转发给鉴权服务器的请求头添加自定义参数。您可以自定义设置参数和取值,也可以直接使用CDN控制台上预设的变量。 - 自定义设置参数和取值时,要求如下: - 多个请求头用竖线(|)分隔,例如:User-Agent=$http_user_agent|vendor=ali_cdn。 
- 参数不区分大小写,即http_remote_addr和HTTP_Remote_Addr一样。 
 
- 使用预设变量时,您可以提取变量的值添加到CDN转发给鉴权服务器的请求上。 - 例如,选择提取变量$http_host,则用户请求的URL地址会加上host=$http_host,此处的host表示用户请求头中的host值。变量名称与变量含义的介绍,请参见变量名称。 
 - 鉴权结果对应状态码 - 鉴权成功状态码 - 说明 鉴权服务器在鉴权成功时,会向CDN返回特定的HTTP状态码。您可以配置多个状态码,多个状态码之间需用英文逗号分隔。 - 示例 若将鉴权成功状态码设置为 - 200,206,则当鉴权服务器返回- 200或- 206时,表示鉴权成功。- 异常处理机制 为避免因异常情况导致所有用户请求被阻断,如果鉴权服务器返回的状态码既不属于成功状态码,也不属于失败状态码,CDN节点将默认放过该请求。 - 鉴权失败状态码 - 说明 鉴权服务器在鉴权失败时,会向CDN返回特定的HTTP状态码。您可以配置多个状态码,多个状态码之间需用英文逗号分隔。 - 示例 若将鉴权失败状态码设置为 - 400,403,则当鉴权服务器返回- 400或- 403时,表示鉴权失败。- 异常处理机制 为避免因异常情况导致所有用户请求被阻断,如果鉴权服务器返回的状态码既不属于成功状态码,也不属于失败状态码,CDN节点将默认放过该请求。 - 其他状态码是否放行 - 是:为避免因为一些异常情况阻断所有的用户请求,如果鉴权服务器返回的状态码既不是成功状态码,也不是失败状态码,CDN节点默认放过用户请求。 说明- 例如: - 鉴权成功状态码设置为200,鉴权服务器返回201时,结果为放过用户请求。 
- 鉴权失败状态码设置为403,鉴权服务器返回404时,结果为放过用户请求。 
 
- 否:表示在鉴权服务器返回的状态码既不是成功状态码,也不是失败状态码的情况下,CDN节点将会拒绝用户请求。 
 - 鉴权失败之后CDN执行的操作 - 响应自定义状态码 - 用户请求鉴权失败时,CDN节点返回给用户的状态码。 - 例如,将响应自定义状态码设置为403,当用户请求鉴权失败时,CDN节点会返回403给用户。 - 鉴权超时配置 - 鉴权超时时长 - 统计的是从CDN节点发起鉴权请求开始,到CDN节点收到鉴权服务器返回的结果为止的时间。单位为毫秒,鉴权超时时长最长可以设置为3000。 - 鉴权超时之后的动作 - CDN与鉴权服务器之间的数据交互超时后,CDN对用户请求的处理。支持通过和拒绝这两种动作,区别如下: - 通过:鉴权超时,CDN将直接允许用户请求。 
- 拒绝:鉴权超时,CDN拒绝用户请求,返回上面配置的响应自定义状态码给用户。 
 
 
- 单击确定,完成配置。 - 成功配置远程鉴权功能后,您可以在远程鉴权页签下,对当前的配置进行修改或关闭远程鉴权功能。 
变量名称
添加自定义参数时,您可以选择直接使用CDN控制台上预设的变量。变量名称与变量含义见下表。
| 变量名称 | 变量含义 | 
| $http_host | 请求头中的Host值。 | 
| $http_user_agent | 请求头中的User-Agent值。 | 
| $http_referer | 请求头中的Referer值。 | 
| $http_content_type | 请求头中的Content-Type值。 | 
| $http_x_forward_for | 请求头中的X-Forwarded-For值。 | 
| $remote_addr | 请求的Client IP信息。 | 
| $scheme | 请求的协议类型。 | 
| $server_protocol | 请求的协议版本。 | 
| $uri | 请求的原始URI。 | 
| $args | 请求的Query String,不包含问号(?)。 | 
| $request_method | 请求方法。 | 
| $request_uri | uri+'?'+args的内容。 |