鉴权功能主要用于保护用户站点资源不被非法站点下载盗用。本文将介绍ESA提供的标态鉴权的原理及示例说明。
原理说明
用户访问加密 URL 构成
http://server_address[:port]/[uri]?auth_key=timestamp-rand-md5hash
鉴权字段说明
字段
描述
字段
描述
server_address
客户的服务器地址。
port
客户要投递的服务器的端口。
uri
客户提供的相对地址。
auth_key
客户设定的鉴权密钥。
timestamp
签算服务器生成鉴权URL的时间加用户设置的鉴权有效期配置的时长。时间点取自签算服务器的Unix时间戳(从1970年01月01日00时00分00秒到现在的总秒数,固定长度为10)。
rand
随机数。建议使用UUID,不能包含中划线(-),例如:477b3bbc253f467b8def6711128c7bec。
md5hash
通过MD5算法计算出的32位字符串,由数字和小写字母组成。
计算方法:
string_to_sign = "URI-Timestamp-rand-PrivateKey" (URI是用户提供的相对地址,不包含参数,如 /accesslog/post) md5hash = md5sum(string_to_sign)
鉴权逻辑说明
ESA服务器接到资源访问请求后,判断
timestamp
是否小于当前时间。如果
timestamp
小于当前时间,服务器判定过期失效,并返回HTTP 403错误。如果
timestamp
大于当前时间,则以string_to_sign
方式构造出一个字符串(参考表格中string_to_sign
构造方式),然后使用MD5算法计算出md5hash
的值,再将计算出的md5hash
值与用户访问请求中携带的md5hash
的值进行比对。结果一致,鉴权通过,返回资源请求。
结果不一致,鉴权失败,返回HTTP 403错误。
标态鉴权示例
用户A提供的推送地址为 http://abc.aliyun.com:8080/accesslog/post、设置的隐私KeyPrivateKey为 aliyuncdn1234、设置的鉴权有效期ExpiredTime为300s。
投递时,ESA服务器会根据当前时间(假设为北京时间2017年12月1日0点0分0秒,unixtime为1512057600),加上用户设置的鉴权有效期300s作为过期时间timestamp。
timestamp = 1512057600 + 300 = 1512057900s。
需要进行加密的字符串为:
string_to_sign = "/accesslog/post-1512057900-0-aliyuncdn1234"
基于该字符串计算出md5hash值:
md5hash = md5sum("/accesslog/post-1512057900-0-aliyuncdn1234") = 0b3cc22622bdbb82d5ba632a5a5c89ca
鉴权URL格式:
http://abc.aliyun.com:8080/accesslog/post?auth_key=1512057900-0-0b3cc22622bdbb82d5ba632a5a5c89ca
当使用用户A提供的加密URL进行访问时,如果ESA服务器计算出来的md5hash
值与访问请求中带的md5hash
值相同,都为0b3cc22622bdbb82d5ba632a5a5c89ca,并且鉴权URL在有效期内,则鉴权通过,反之鉴权失败。
- 本页导读
- 原理说明
- 标态鉴权示例