tencent cloud

文档反馈

Token 鉴权

最后更新时间:2024-02-26 10:00:26

    功能简介

    Token 鉴权是一种实现原理简单、可靠性高的访问控制策略,通过配置鉴权规则进行 URL 访问校验,可有效防止站点资源被恶意盗刷。该功能的使用需要客户端和 EdgeOne 配合,客户端负责发起加密的 URL 请求,EdgeOne 负责根据预先设定的规则对 URL 进行合法性验证。

    功能原理

    Token 鉴权的实现主要由以下两部分配合:
    客户端:根据鉴权规则(包括鉴权算法、密钥)发起鉴权 URL 的请求。
    EdgeOne 节点:对鉴权 URL 中的鉴权信息(md5 字符串+时间戳)进行校验。当校验通过时,该访问请求才会被视为合法请求,节点正常响应。若校验失败,则节点拒绝该访问,直接返回 403。

    Token 鉴权 URL 生成和校验工具

    EdgeOne 提供了 Token 鉴权 URL 的生成工具和校验工具,开发者可以使用该工具快速准确地生成和校验符合要求的防盗链 URL。

    操作步骤

    1. 登录 边缘安全加速平台 EO 控制台,在左侧菜单栏中,单击站点列表,在站点列表内单击需配置的站点。
    2. 在站点详情页面,单击规则引擎。
    3. 在规则引擎管理页面,单击创建规则,进入新规则的编辑页面。
    4. 在规则编辑页面,设置触发该规则的匹配条件。
    5. 单击操作 > 选择框,在弹出的操作列表内,选择操作为Token 鉴权,参数配置说明如下:
    配置项
    说明
    鉴权方式
    目前支持 4 种鉴权签名计算方式,请您根据访问 URL 格式选择合适的方式。详情请参见鉴权方式
    密钥(主)
    主用密码,由 6-40 位大小写英文字母或数字组成。
    密钥(备)
    备用密码,由 6-40 位大小写英文字母或数字组成。
    鉴权参数
    鉴权参数名称,节点将校验此参数名对应的值。由 1 - 100位大小写字母、数字或下划线组成。
    有效时长
    鉴权 URL 的有效时长,单位:秒(1 - 630720000),用于判断客户端访问请求是否过期:
    若当前时间超过“timestamp + 有效时长”时间,则为过期请求,直接返回 403。
    若当前时间未超过“timestamp+ 有效时长”时间,则请求未过期,继续校验 md5 字符串。

    鉴权方式

    方式 A

    鉴权 URL 格式

    http://Hostname/Filename?sign=timestamp-rand-uid-md5hash

    鉴权字段说明

    字段
    说明
    Hostname
    站点加速域名。
    Path
    资源访问路径,鉴权时需以/开头。
    sign
    自定义设置的鉴权参数名称。
    timestamp
    十进制整型正数的 Unix 时间戳,是从 UTC 时间1970年01月01日00时00分00秒到现在的总秒数,其定义与所在时区无关。
    rand
    0 - 100位随机字符串,由大小写字母与数字组成。
    uid
    用户 ID,暂未使用,默认为0。
    md5hash
    通过 MD5 算法计算出的固定长度为32位的字符串:
    算法:MD5(Path-timestamp-rand-uid-密钥)。
    鉴权逻辑:若请求未过期,则节点比较此字符串值与请求 URL 中携带的 md5hash 值:两值相同,鉴权通过,响应请求;两值不同,鉴权失败,返回403。

    方式 B

    鉴权 URL 格式

    http://Hostname/timestamp/md5hash/Filename

    参数说明

    字段
    说明
    Hostname
    站点加速域名。
    Path
    资源访问路径,鉴权时需以/开头。
    timestamp
    时间戳参数。
    格式:YYYYMMDDHHMM,UTC+8 时间,例如201807301000。
    md5hash
    通过 MD5 算法计算出的固定长度为32位的字符串:
    算法:MD5(密钥 + timestamp + Path)。
    鉴权逻辑:若请求未过期,则节点比较此字符串值与请求 URL 中携带的 md5hash 值:两值相同,鉴权通过,响应请求;两值不同,鉴权失败,返回403。

    方式 C

    鉴权 URL 格式
    http://Hostname/md5hash/timestamp/Filename

    参数说明

    字段
    说明
    Hostname
    站点加速域名。
    Path
    资源访问路径,鉴权时需以/开头。
    timestamp
    时间戳参数。
    格式:十六进制整型正数的 Unix 时间戳,是从 UTC 时间1970年01月01日00时00分00秒到现在的总秒数,其定义与所在时区无关。
    md5hash
    通过 MD5 算法计算出的固定长度为32位的字符串:
    算法:MD5(密钥+ Path + timestamp )。注:计算时,十六进制的 timestamp 需过滤掉进制数标识0x。
    鉴权逻辑:若请求未过期,则节点比较此字符串值与请求 URL 中携带的 md5hash 值:两值相同,鉴权通过,响应请求;两值不同,鉴权失败,返回403。

    方式 D

    鉴权 URL 格式

    http://Hostname/Filename?sign=md5hash&t=timestamp

    参数说明

    字段
    说明
    Hostname
    站点加速域名。
    Path
    资源访问路径,鉴权时 需以/开头。
    sign
    自定义设置的鉴权参数名称。
    t
    自定义设置的时间戳参数名称
    timestamp
    时间戳参数。
    格式:十进制整型正数的 Unix 时间戳,是从 UTC 时间1970年01月01日00时00分00秒到现在的总秒数,其定义与所在时区无关;或十六进制整型正数的 Unix 时间戳,是从 UTC 时间1970年01月01日00时00分00秒到现在的总秒数,其定义与所在时区无关。
    md5hash
    通过 MD5 算法计算出的固定长度为32位的字符串:
    算法:MD5(密钥 + Path+ timestamp)。注:计算时,十六进制的 timestamp 需过滤掉进制数标识0x。
    鉴权逻辑:若请求未过期,则节点比较此字符串值与请求 URL 中携带的 md5hash 值:两值相同,鉴权通过,响应请求;两值不同,鉴权失败,返回403。

    配置示例

    假设请求 http://www.example.com/test.jpg 符合鉴权方式 A,则可配置如下:
    
    
    

    获取鉴权参数

    Path:/foo.jpg
    timestamp:服务端生成鉴权URL的时间为2022年03月15日10:30:32(UTC+8),转换为十进制的整形数值为1647311432
    rand:生成随机数为 J0ehJ1Gegyia2nD2HstLvw
    uid:0
    密钥:3C9mxSGzc8ZadmGNzE
    md5hash:MD5(Path-timestamp-rand-uid-密钥)= MD5(/foo.jpg-1647311432-J0ehJ1Gegyia2nD2HstLvw-0-3C9mxSGzc8ZadmGNzE)= ecce3150cbdaac83b116d937777ca77f。

    鉴权 URL

    http://www.example.com/foo.jpg?sign=1647311432-J0ehJ1Gegyia2nD2HstLvw-0-ecce3150cbdaac83b116d937777ca77f

    节点鉴权

    当节点服务器接受到客户端通过加密 URL 发出的请求时,解析出 URL 中的 timestamp 参数,加上配置的有效时长 “1秒”,与当前时间比较:
    若当前时间超过”timestamp + 有效时长“时间,则为过期请求,直接返回403。
    若当前时间未超过”timestamp + 有效时长“时间,则请求未过期,继续第3步。
    节点服务器通过获取的鉴权参数计算 md5hash 值,与请求 URL 中携带的 md5hash 值做比较:两值相同,鉴权通过,响应请求;两值不同,鉴权失败,返回403。

    注意事项

    1. 鉴权通过后,节点会自动忽略 URL 中鉴权相关的参数进行缓存,从而提高缓存命中率,减少回源量。
    2. URL 中不能包含中文。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持