veImageX 图片解决方案不仅提供了 Referer 黑白名单的访问控制,还支持 ABCD 四种方式的鉴权,更有效地保障客户站点资源不被非法访问或盗用。本文将介绍鉴权方式 A 的参数及原理。
已开通 veImageX 图片服务,如未开通可参照服务管理。
鉴权 URL 格式规则说明
服务 | URL |
---|---|
图片处理服务 | http(s)://域名/资源URI~模板.输出格式?签名参数名=timestamp-rand-uid-md5hash |
素材托管服务 | http(s)://域名/资源URI?签名参数名=timestamp-rand-uid-md5hash |
鉴权字段描述如下表所示。
字段 | 描述 |
---|---|
域名 | CDN 域名。 |
资源 URI | 图片或素材在 veImageX 服务中对应存储的唯一标识符。
|
模版 | 图片处理模版,图片处理服务专有。 |
输出格式 | 图片输出格式,图片处理服务专有。 |
签名参数名 | 鉴权信息的参数名,支持用户自定义,默认为sign 。由 1-100 位大小写字母、数字、下划线组成。 |
timestamp | 发起资源请求的十进制整数 Unix 时间戳,与鉴权有效时间共同控制 URL 的有效时间。从UTC1970年1月1日0时0分0秒起至现在的总秒数,不考虑闰秒。 |
rand | 随机字符串。 |
uid | 用户 ID。 |
md5hash | 通过 md5 算法计算出的长度为32的字符串,计算公式为:md5hash = md5sum(path-timestamp-rand-uid-主鉴权密钥)。
|
鉴权逻辑说明
CDN 接到资源访问请求后,将 URL 中的timestamp + 鉴权有效时间
和当前时间进行比较。
如果timestamp + 鉴权有效时间
小于当前时间,服务器判定过期失效,并返回 HTTP 403 错误。
如果timestamp + 鉴权有效时间
大于当前时间,使用 MD5 算法算出 md5hash 的值,将计算出的 md5hash 值与 URL 中的 md5hash 进行比较。
说明
登录 veImageX 控制台,单击服务管理。选择相应的图片服务,单击基础配置。
在分发配置页签的域名信息中,单击域名的管理按钮。
进入配置页面的访问控制,打开 URL 鉴权按钮,开始配置 URL 鉴权。
具体参数信息如下表所示。
参数 | 说明 |
---|---|
主鉴权密钥 | 在 veImageX 控制台域名配置中设定的鉴权密钥,必填。
|
备用鉴权密钥 | 备用 KEY 默认为空,与主 KEY 的配置规则相同。选填。 |
鉴权参数名 | URL 中整个鉴权信息的变量。
|
有效时间 | 一次鉴权后默认生效的时长。
说明 如果当前时间大于资源请求 URL 中携带的 timestamp + 有效时间时,判断本次鉴权失败。资源请求返回失败代码。 |
参数 | 值 |
---|---|
域名 | imagex.e7e7e7.com |
鉴权模式 | A |
主鉴权密钥 | 94d76db810e3a074fa6b628f92bfe575 |
签名参数名 | sign |
有效时间 | 1800s |
待签资源鉴权参数说明如下表所示。
参数 | 值 |
---|---|
资源 URI | 1.jpg |
模版 | tplv-service-image |
格式 | image |
timestamp | 1627287282 |
rand | 随机字符串 rand |
uid | imagex |
鉴权 URL 规则为:http(s)://域名/资源URI~模板.输出格式?签名参数名=timestamp-rand-uid-md5hash
生成的鉴权 URL:http://imagex.e7e7e7.com/1.jpg~tplv-service-image.image?sign=1627287282-rand-imagex-9a8229123604d22d18b6dcfe44b4519e
CDN 缓存:开启了鉴权方式 A 的域名,访问 URL 中携带了签名参数,CDN 进行缓存时,会自动忽略签名参数进行缓存,不会影响域名缓存命中率。
回源:对于通过 CDN 鉴权但未命中缓存的 URL,CDN 节点会发起回源请求,回源请求会去掉 query 中的签名参数,源站无需特殊处理。
我们已提供 Python Demo 以及 Go Demo 示例,具体的实现方法请参考鉴权示例。