签名及凭证
## 签名及凭证
因为凭证的生成需要用到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)