签名及凭证

## 签名及凭证 因为凭证的生成需要用到SecretKey,因此该生成动作不应在不受信任的环境中进行 #### 密钥(AccessKey/SecretKey) 密钥用于凭证的生成。以 SecretKey 为参数,配合适当的签名算法,可以得到原始信息的数字签名,防止内容在传递过程中被伪造或篡改。 #### 算法 ##### 1.获取当前UTC的 Unix时间戳 ,单位为秒 注意:为确保两边授权截止时间的理解保持一致,需要同步校准各自的时钟。频繁返回 401 状态码时请先检查时钟同步性 ```js var unixTimes = Math.floor(Date.now() / 1000); #假设当前UTC时间为2021-01-11 00:00:00 unixTimes = '1610294400' ``` ##### 2.使用SK对时间戳进行SHA256签名 ```js var signed = hmac_sha256(unixTimes , "<SecretKey>") #假设 SecretKey 为 TCE_SECRET_KEY,实际签名为 signed = 'd9ace93d0fb066feebf5a2545bfd04c63bc961b299376721569fe6598ad8d489' ``` ##### 3.把AK,时间戳,签名用英文符号 : 连接起来,再加上`前缀(TCE )`组合成凭证 ```js var token = 'TCE ' + AccessKey + ':' + unixTimes + ':' + signed; #假设AccessKey 为 TCE_ACCESS_KEY ,则最后得到的凭证应为 token = 'TCE TCE_ACCESS_KEY:1610294400:d9ace93d0fb066feebf5a2545bfd04c63bc961b299376721569fe6598ad8d489' ``` #### 示例 我们封装了以下SDK方便调用 - [C#](doc:iOvZIXTk) - [JAVA](doc:lAYlU11f)