REST架构风格研究程序员

基于HMAC-SHA1的RESTful API 授权签名方法

2018-01-19  本文已影响140人  fxm5547

首发于fxm5547的博客

引言

为了避免API被非法调用,调用过程中被篡改和重放攻击,需要增加API调用授权。对调用信息进行签名和验签是常用的授权方法。调用双方约定秘钥并内部存放,利用秘钥基于hash算法(常用的有MD5,SHA1和SHA256)通过HMAC运算生产签名signature。

参考

传递方式

签名过程

$sign = base64(hmac-sha1(SecretKey,
            HTTPRequestMethod + "\n"
            + CanonicalURI + "\n"
            + CanonicalQueryString + "\n"
            + CanonicalHeaders + "\n"
            + CanonicalBody))
CanonicalQueryString = (key1=urlEncode(val1)&key2=urlEncode(val2)...)

urlEncode指遵循RFC 3986的URL Encode(PHP中的rawurlencode())。

CanonicalHeaders = lower("X-Co-App") + ':' + trim(HeaderValue) + "\n"
                   + lower("X-Co-TimeStamp") + ':' + trim(HeaderValue)

lower()表示转换为小写,trim()表示去除前后空格。

CanonicalBody = (key1=val1&kay2=val2...)

如果value是对象或数组,对其进行json encode。

签名验证失败

上一篇下一篇

猜你喜欢

热点阅读