标态鉴权说明

更新时间:2025-03-27 08:46:07

鉴权功能主要用于保护用户站点资源不被非法站点下载盗用。本文将介绍ESA提供的标态鉴权的原理及示例说明。

原理说明

  • 用户访问加密 URL 构成

    http://server_address[:port]/[uri]?auth_key=timestamp-rand-md5hash
  • 鉴权字段说明

    字段

    描述

    字段

    描述

    server_address

    客户的服务器地址。

    port

    客户要投递的服务器的端口。

    uri

    客户提供的相对地址。

    auth_key

    客户设定的鉴权密钥。

    timestamp

    签算服务器生成鉴权URL的时间加用户设置的鉴权有效期配置的时长。时间点取自签算服务器的Unix时间戳(从19700101000000秒到现在的总秒数,固定长度为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、设置的鉴权有效期ExpiredTime300s。

  • 投递时,ESA服务器会根据当前时间(假设为北京时间2017121000秒,unixtime1512057600),加上用户设置的鉴权有效期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在有效期内,则鉴权通过,反之鉴权失败。

  • 本页导读
  • 原理说明
  • 标态鉴权示例