月萌API接口签名规则

月萌API的认证规则目前支持三种形式:

  1. 简单签名模式

  2. md5签名认证

  3. hmac签名认证


前置条件:订阅接口以获取Key Id和Key Code


简单签名模式, 直接将sign设置为Key Code即可,月萌API服务网关将会验证Key Id和Key Code是否有效,且已关联需访问的接口。此种方式使用简单,常用于开发测试过程中,但因Key Code直接明码放置在URL中,可能有泄露风险(泄露后需在个人中心->订阅详情中重新申请新的Key Code)。

md5签名认证, 使用md5将请求信息进行hash签名(签名方式见后文或各接口的示例代码),月萌API服务网关对请求参数进行md5签名,此种方式较安全。

hmac签名认证,使用hmac sha1将请求信息进行hash签名(签名方式见后文或各接口的示例代码),月萌API服务网关对请求参数进行hmac sha1签名,此种方式较安全。


注意当前仅支持GET参数签名及POST application/x-www-form-urlencoded参数签名,对于POST的application/json及Content-Type: multipart/form-data中的参数不参与签名。某些语言的网络请求访问库在POST时默认使用Content-Type: multipart/form-data,此时需要排除这些参数,可以参考各接口页面中本站提供的demo,另外强烈推荐基于这些demo代码进行接口调用,demo中已包含上面三种认证方式,修改参数signMethod即可使用不同的认证方式,另外demo也包含了参数构造及将请求结果json转换成实体类等功能,使用时填写包含TODO注释部分即可实现接口调用。

sign生成说明

步骤1. 构造验证字符串

验证字符串包含除sign的所有参数名与参数值(key=value)组合后经字典排序,将排序结果以&拼接起来,最后使用冒号(:)与Key Code连接起来最终组成验证字符串。

如接口URL为:http://api.moonapi.com/148?keyid=1&_t=1639912579&url=http://www.baidu.com,  申请的Key Id为1,Key Code为xxxxxxxxxxxxxxxxxxxxxxxx

    1. 除sign的所有参数名与参数值(key=value)组合后经字典排序

_t=1639912579, keyid=0, url=http://www.baidu.com

    2. 将排序结果以&拼接起来

_t=1639912579&keyid=0&url=http://www.baidu.com

    3. 最后使用冒号(:)与Key Code连接起来最终组成验证字符串

_t=1639912579&keyid=0&url=http://www.baidu.com:xxxxxxxxxxxxxxxxxxxxxxxx


步骤2. 生成sign值

将步骤1构造的验证字符串,使用md5或hmac sha1生成hash签名,md5进行hash后生成32位hash编码(如6a4b5dbcdda39dd35349094e6e19fbc0),hmac sha1生成40位hash编码(如62c34a28d22c53fb6a20451a62917b5263c8241b),某些语言生成的是byte数组,需要转换成16进制的字符串,可参考各接口页面提供的Demo代码。注意不要进行base64编码!!


sign生成注意事项

  1. 仅支持GET参数签名及POST application/x-www-form-urlencoded参数签名,其它形式如multipart/form-data中的所有参考均不要参与签名

  2. 对于GET参数签名及POST application/x-www-form-urlencoded参数签名,所有参数除sign外均需包含在构造验证字符串中

  3. 某些语言的网络请求会在POST时默认使用multipart/form-data

  4. 目前各接口示例文档均包含C#, java, php, nodejs, python的示例代码,包含了三种签名方式,请在使用过程参考