全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
HTTPDNS

鉴权解析接口

更新时间:2017-07-13 16:59:30

1. 背景

为了避免 CC攻击刷费用问题 对计费系统的影响,设计了httpDNS鉴权机制。

2. 鉴权方案

由于老用户已经发布了产品,采用的是非鉴权功能方式接入,这部分产品的用户需要继续可以访问非鉴权接口。

所以我们开放一个新的鉴权接口,产品新版本可以逐渐迁移至新接口,当旧app用户减少到一定量后,可以关闭非鉴权接口。

以避免对计费系统的影响。

剩余调用情况,查看如下图:剩余量

2.1 老用户迁移方案

  • 关闭非鉴权接口,会导致老版本的存量正在使用产品的用户,无法访问HttpDNS服务

  • 引导老用户更新版本,逐渐迁移至鉴权接口

  • 非鉴权接口存量产品用户下降,直至可以接受关闭非鉴权接口带来的损失的时候,可以手动关闭非鉴权接口

开关

2.2 新用户使用方案

  • 为避免鉴权带来的额外接入成本,非鉴权接口默认是开启

  • 如果仅需要鉴权接口功能,请手动关闭非鉴权访问权限。

2.3 非鉴权接口开关的管理

  • 开启时,可能会引入安全隐患。

  • 只有关闭 非鉴权接口开关 时,才能避免被攻击导致的费用。

3. 签名生成和鉴权机制

3.1 签名生成算法及示例

新鉴权接口

签名算法

sign = md5sum( host-secret-timestamp )

鉴权字段说明

字段 描述
host 需要被解析的host,与URL中的host参数取同样的值
secret 由服务器负责生成,查看方式:『控制台-鉴权配置-鉴权secretkey』
timestamp 签名失效时间,1970年1月1日以来的秒数(整形正数,固定长度10)。

签名示例

  • 示例1(普通解析API接口):

    • 原请求:http://203.107.1.33/100000/d?host=www.aliyun.com
    • 假设秘钥为:IAmASecret,希望在北京时间2018-08-15 15:00:00失效(时间戳1534316400)
    • sign = md5sum(“www.aliyun.com-IAmASecret-1534316400”) = 60c71e98b6d7fcbb366243e224eab457
    • 鉴权请求:http://203.107.1.33/100000/sign_d?host=www.aliyun.com&t=1534316400&s=60c71e98b6d7fcbb366243e224eab457
  • 示例2(批量解析API接口):

    • 原请求:http://203.107.1.33/100000/resolve?host=www.aliyun.com,www.taobao.com
    • 假设秘钥为:IAmASecret,希望在北京时间2018-08-15 15:00:00失效(时间戳1534316400)
    • sign = md5sum(“www.aliyun.com,www.taobao.com-IAmASecret-1534316400”) = 12a3f6b1b14a46ca813ca6439beb59a4
    • 鉴权请求:http://203.107.1.33/100000/sign_resolve?host=www.aliyun.com,www.taobao.com&t=1534316400&s=12a3f6b1b14a46ca813ca6439beb59a4

此方案优缺点

  • 客户端时间不同
  • 秘钥放在客户端丢失有风险
  • 无需去服务器拉取

3.2 鉴权响应

  • 鉴权成功时,HTTP响应的状态码为200,响应结果同原httpDNS响应
  • 鉴权失败时,HTTP响应的状态码为403400,响应结果同时也返回具体的错误码,响应结果用JSON格式表示
    1. { "code": "InvalidSignature" }

3.3 状态码说明

HTTP状态码 错误码 描述
403 SignatureExpired 时间戳已过期
403 InvalidSignature 签名不正确
400 InvalidDuration 签名有效期过长 (最长86400秒)
400 InvalidSignature 签名格式不正确
400 InvalidTimestamp 时间戳格式不正确
400 AccountNotExists 账户不存在或被禁用
本文导读目录