在URL中包含签名HMAC-SHA1加密方式

洋漾 2019-12-30 AM 886℃ 0条

sdk各种操作在URL中加入签名信息,这样就可以授权给第三方各种操作权限。

实现方式

URL签名示例:

http://example.vodcms.com/video/catList?type=3&newStart=2017-10-15_1541069179&size=12&AppKey=nz2pc56s936**9l&Expires=1141889120&Uid=123456&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
URL签名,必须至少包含Signature、Expires和AppKey三个参数。

  • Uid 是用户的标识ID
  • Expires 这个参数的值是一个UNIX时间(自UTC时间1970年1月1号开始的秒数,详见Wikipedia),用于标识该URL的超时时间。如果服务后台接收到这个URL请求的时候晚于签名中包含的Expires参数时,则返回请求超时的错误码。例如:当前时间是1141889060,开发者希望创建一个60秒后自动失效的URL,则可以设置Expires时间为1141889120。
  • AppKey 即密钥中的AppKey。
  • Signature 表示签名信息。所有的后台支持的请求和各种Header参数。

    Signature字段计算的方法:

    Signature = urlencode(base64(hmac-sha1(AppSecret,
              VERB + "\n"
              + Expires + "\n" 
              + Uid + "\n"
              + CanonicalizedOperat)))
    
  • AppSecret 表示签名所需的密钥
  • VERB表示HTTP 请求的Method,主要有PUT,GET,POST,HEAD,DELETE等
  • \n 表示换行符
  • Expires 表示此次操作过期时间,且必须为Unix时间戳。
  • CanonicalizedOperat 表示用户想要进行鉴权的操作
  • 如果传入的Signature,Expires,AppKey出现不止一次,以第一次为准。
  • 请求先验证请求时间是否晚于Expires时间,然后再验证签名。
  • 将签名字符串放到url时,注意要对url进行urlencode

    构建CanonicalizedOperat的方法:

    用户发送请求中想想要进行的操作被称为CanonicalizedOperat。它的构建方法如下
    1、将CanonicalizedOperat置成空字符串 “”
    2、放入要进行授权的操作 如/video/catList
    3、如果用户请求在指定了查询字符串(QueryString,也叫Http Request Parameters),那么将这些查询字符串及其请求值按照 字典序,从小到大排列,以 & 为分隔符,按参数添加到CanonicalizedOperat中。此时的CanonicalizedOperat如:/video/catList?newStart=2017-10-15_1541069179&size=12&type=3。

    注意事项

  • 签名的字符串必须为 UTF-8 格式。含有中文字符的签名字符串必须先进行 UTF-8 编码,再与 AppSecret计算最终签名。
  • 签名的方法用RFC 2104中定义的HMAC-SHA1方法,其中Key为 AppSecret 。

    在Header中包含签名

    用户可以在HTTP请求中增加 Authorization 的Header来包含签名(Signature)信息,表明这个消息已被授权。

    实现方式

    Header签名示例

    PUT /nelson HTTP/1.0
    Authorization:CMS 44CF9590006BF252F707:26NBxoKdsyly4EDv6inkoDft/yA=
    Date: Thu, 17 Nov 2005 18:49:58 GMT
    Uid: 123456
    Host: example.vodcms.com

    Authorization字段计算的方法:

    Authorization = "CMS " + AppKey + ":" + Signature
    Signature = base64(hmac-sha1(AppSecret,
              VERB + "\n"
              + Date + "\n"
              + Uid + "\n"
              + CanonicalizedOperat))
    
  • AppSecret 表示签名所需的密钥
  • VERB表示HTTP 请求的Method,主要有PUT,GET,POST,HEAD,DELETE等
  • \n 表示换行符
  • Uid 是用户的标识ID
  • Date 表示此次操作的时间,且必须为GMT格式,如”Sun, 22 Nov 2015 08:16:38 GMT” (RFC1123)
  • CanonicalizedOperat 表示用户想要访问的OSS资源
    其中,Date、Uid和CanonicalizedOperat不能为空;如果请求中的Date时间和CMS后台服务器的时间差15分钟以上,CMS后台服务器将拒绝该服务,并返回HTTP 403错误。

    构建CanonicalizedOperat的方法:

    用户发送请求中想想要进行的操作被称为CanonicalizedOperat。它的构建方法如下
    1、将CanonicalizedOperat置成空字符串 “”
    2、放入要进行授权的操作 如/video/catList
    3、如果用户请求在指定了Post参数,那么将这些Post参数及其请求值按照 字典序,从小到大排列,以 & 为分隔符,按参数添加到CanonicalizedOperat中。此时的CanonicalizedOperat如:/video/catList?newStart=2017-10-15_1541069179&size=12&type=3,除基本类型外的复杂类型,需要先通过json序列化后再添加到CanonicalizedOperat中。
标签: 加密算法, hmac-sha1

非特殊说明,本博所有文章均为博主原创。

评论啦~