1. 签名密钥[废弃保留]

1.1. 什么是签名密钥

签名密钥是由您为自己的地球号应用创建的一对 Key 和 Secret,您需要使用key和secret来为API请求计算签名字段(sign字段)。地球号API服务会根据API,key和存储在后台的secret计算签名,并和客户端传来的签名字段比较验证。如果签名不同就会返回授权失败的错误。使用时您需要了解以下几点:

  • 每个APP创建的时候会自动生成key和secret,key一旦生成不能更改,secret可以随时重置修改。

  • 地球号会对每个API请求进行签名验证。(请妥善保管此密钥,地球号会对密钥进行加密存储来保障密钥的安全性)。

  • API请求的的部分参数都会参与签名,但并非所有的请求部分都会参与签名计算,本设计初衷是用来简化签名过程。

1.2. 废弃和保留

签名密钥是地球号早期完成非登陆授权任务的主要方式,这个功能后来由应用令牌完成,而这个机制也被废弃。但,考虑到后面有任何可能性需要兼容key和secret机制。我们的APP表仍旧保留了key和secret字段。

1.2.1. 加签方法

计算的签名保存在 Request 的 Header 中,Header 名称:sign

签名计算方法步骤如下:

组织参与加签的数据

String stringToSign=
HTTPMethod +    //Method必须全大写,POST,GET,PUT,DELETE
HTTPPath   +    //例如"/user"这样的.如果api是http://api.xdua.com/user/cwYwng2 这种样子,那么path是: "/user/cwYwng2",但path不包含query变量(url中?开头的部分)
Nonce      +    //客户端随机生成的一个随机数(推荐使用一个随机数的md5值)    
AppSecret       //创建app时获取的secret

一个例子是:POST/vfc35af277cc2d8808d1533c62173c49159e54b127abc7cca1862dac91db6256190

注意:url中的query部分不算进签名字符串里,例如:http://api.xdua.com/ugrp?uid=Dt5mvrtU ,此时参与签名的只有?之前的(不包含?号)

签名部分 说明
POST HTTPMethod
Path /vfc
nonce 35af277cc2d8808d1533c62173c49159e5
appsecret 4b127abc7cca1862dac91db6256190

计算签名

String sign = md5(stringToSign);

放置签名,把签名连同appkey和nonce放置在request的header里,把"|"作为分隔符。

httpHeaders["Authorization"] = appkey+"|"+nonce+"|"+sign;

一个典型的header["Authorization"]是: "aHEVYhE0|23a54eefcb73107b69eeef63df284888|16c758083718e1bcbeef1f29ebcd3159"

签名部分 说明
aHEVYhE0 appkey
23a54eefcb73107b69eeef63df284888 随机数nonce
4b127abc7cca1862dac91db6256190 appsecret

1.2.2. 密钥泄露 修改替换

当您遇到如下情况:

  • 您的某一个密钥发生了泄露,您可能想要保留该密钥与 APP 的绑定关系,但是想要修改密钥的 Key 和 Secret。
  • 当您操作将密钥应用于 APP 时,可能该 APP 已经绑定了某个密钥,需要替换密钥。

以上两种情况都建议按照下面的流程来操作:

先在后端同时支持两个密钥:原来的密钥和即将修改或替换的密钥,确保切换过程中的请求能够通过签名验证,不受修改或替换的影响。 后端配置完备后,完成修改,确定新 Key 和 Secret 生效后再将之前已泄露或废弃的密钥删除。

results matching ""

    No results matching ""