本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
1. 背景
为了避免可能存在的盗刷问题对您的计费造成影响,我们设计了鉴权机制对此进行防范,您可以按此文档指引进行接入。
2. 鉴权方案
由于老用户已经发布了产品,采用的是非鉴权功能方式接入,这部分产品的用户需要继续可以访问非鉴权接口。
所以我们开放一个新的鉴权接口,产品新版本可以逐渐迁移至新接口,当旧app用户减少到一定量后,可以关闭非鉴权接口,以避免对计费系统的影响,如下图所示。
2.1 存量用户迁移方案
关闭非鉴权接口,会导致老版本的存量正在使用产品的用户,无法访问HttpDNS服务。
引导存量用户更新版本,逐渐迁移至鉴权接口。
当非鉴权接口存量产品用户下降,直至可以接受关闭非鉴权接口带来的损失的时候,可以手动关闭非鉴权接口。
2.2 新用户使用方案
为避免鉴权带来的额外接入成本,非鉴权接口默认是开启的。
如果仅需要鉴权接口功能,请手动关闭非鉴权访问权限。
2.3 非鉴权接口开关的管理
开启时,可能会引入安全隐患。
只有关闭非鉴权接口开关时,才能避免被攻击导致的费用。
3. 签名生成和鉴权机制
使用HTTP API时,务必遵循风险防范建议,否则存在业务故障风险。
3.1 签名生成算法及示例
鉴权接口
http://203.107.XXX.XXX/{account_id}/sign_d
http://203.107.XXX.XXX/{account_id}/sign_resolve
其中的 {account_id} 需要替换为用户的HTTPDNS Account ID,在HTTPDNS控制台上可以获得这个ID。
鉴权接口可以添加IP参数,是否添加该参数及参数内容不影响签名的计算。
服务IP列表获取可以参考:获取解析服务地址
签名算法
sign = md5sum( host-secret-timestamp )
鉴权字段说明
字段 | 描述 |
host | 需要被解析的host,与URL中的host参数取同样的值。 |
secret | 由服务器负责生成,查看方式:控制台 > 鉴权配置 > 鉴权secret key。 |
timestamp | 签名失效时间,1970年1月1日以来的秒数(整型正数,固定长度10)。 说明 签名最长有效时间不超过24小时。 |
签名示例
示例1(普通解析API接口):
原请求:http://203.107.XXX.XXX/{account_id}/d?host=www.aliyun.com
假设密钥为:IAmASecret,希望在北京时间2018-08-15 15:00:00失效(时间戳1534316400)
sign = md5sum(“www.aliyun.com-IAmASecret-1534316400”) = 60c71e98b6d7fcbb366243e224eab457
鉴权请求:http://203.107.XXX.XXX/{account_id}/sign_d?host=www.aliyun.com&t=1534316400&s=60c71e98b6d7fcbb366243e224eab457
示例2(批量解析API接口):
原请求:http://203.107.XXX.XXX/{account_id}/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.XXX.XXX/{account_id}/sign_resolve?host=www.aliyun.com,www.taobao.com&t=1534316400&s=12a3f6b1b14a46ca813ca6439beb59a4
此方案优缺点
缺点
客户端时间不同。
密钥放在客户端丢失有风险。
优点
无需去服务器拉取。
3.2 鉴权响应
鉴权成功时,HTTP响应的状态码为200,响应结果同原HTTPDNS响应。
鉴权失败时,HTTP响应的状态码为403或400,响应结果同时也返回具体的错误码,响应结果用JSON格式表示。
{ "code": "InvalidSignature" }
3.3 状态码说明
HTTP状态码 | 错误码 | 描述 |
403 | SignatureExpired | 时间戳已过期 |
403 | InvalidSignature | 签名不正确 |
400 | InvalidDuration | 签名有效期过长(最长86400秒) |
400 | InvalidSignature | 签名格式不正确 |
400 | InvalidTimestamp | 时间戳格式不正确 |
400 | AccountNotExists | 账户不存在或被禁用 |