qiniu-auth
Version:
为七牛云操作提供加密支持
208 lines (169 loc) • 7.27 kB
Markdown
# qiniu-auth 文档
- [access_token 管理凭证](#管理凭证)
- [upload_token 上传凭证](#上传凭证)
- [download_token 下载凭证](#下载凭证)
- [Pandora API签名](#Pandora-API签名)
- [qiniu_token HTTP请求鉴权](#HTTP请求鉴权)
- [EncodedEntryURI](#EncodedEntryURI)
- [HMAC-SHA1签名](#HMAC-SHA1签名)
- [URL安全的Base64编码](#URL安全的Base64编码)
## 管理凭证
qiniu_auth.access_token(options);
[官方文档](https://developer.qiniu.com/kodo/manual/1201/access-token)
options有5个参数属性:
- path,string,必选,请求的路径
- query,string || object,可选,请求的参数,如果object类型会进行qs.stringify
- form,string || object,可选,HTTP Body,如果object类型会进行qs.stringify,当 Content-Type 为 application/x-www-form-urlencoded 时,签名内容必须包括请求内容
- AccessKey,string,可选,指定的七牛云AccessKey参数,和this.AccessKey参数二选一,options.AccessKey优先级高
- SecretKey,string,可选,指定的七牛云SecretKey参数,和this.SecretKey参数二选一,options.SecretKey优先级高
```javascript
// - 以下用获取储存空间列表举例:
// 获取管理凭证
let auth = qiniu_auth.access_token({ AccessKey: '<Your AccessKey>', SecretKey: '<Your SecretKey>', path: '/buckets' });
// 获取储存空间列表请求
await rp({
url: 'http://rs.qbox.me/buckets',
method: 'GET',
headers: {
'Authorization': auth
}
});
```
## 上传凭证
qiniu_auth.upload_token(options);
[官方文档](https://developer.qiniu.com/kodo/manual/1208/upload-token)
options有5个参数属性:
- scope,string,必选,储存空间名称 + ':' + 文件名称
- deadline,string || number,可选,过期时间,Unix时间戳,默认的过期时间是1个小时
- returnBody,string || object,可选,最后想得到 图片的名称、大小、宽高和校验值等值
- AccessKey,string,可选,指定的七牛云AccessKey参数,和this.AccessKey参数二选一,options.AccessKey优先级高
- SecretKey,string,可选,指定的七牛云SecretKey参数,和this.SecretKey参数二选一,options.SecretKey优先级高
```javascript
// - 以下用直传文件举例:
// 获取上传凭证
let auth = qiniu_auth.upload_token.call(qiniu_config, { scope: 'bucketName:qiniu_auth.js', returnBody: '{"name": $(fname) }' });
// 发起请求
await rp({
method: 'POST',
url: 'http://up-z0.qiniup.com',
formData: {
scope: 'bucketName:qiniu_auth.js',
key: 'qiniu_auth.js', fileName: 'qiniu_auth.js',
token: auth, file: fs.createReadStream('<文件路径>')
}
});
```
## 下载凭证
qiniu_auth.download_token(options);
[官方文档](https://developer.qiniu.com/kodo/manual/1202/download-token)
options有5个参数属性:
- url,string,必选,请求的url
- deadline,string || number,可选,过期时间,Unix时间戳,默认的过期时间是1个小时
- query,string || object,可选,请求的query部分,如果是object会被qs.stringify,如果指定query参数会替换掉原url的query部分
- AccessKey,string,可选,指定的七牛云AccessKey参数,和this.AccessKey参数二选一,options.AccessKey优先级高
- SecretKey,string,可选,指定的七牛云SecretKey参数,和this.SecretKey参数二选一,options.SecretKey优先级高
```javascript
// 使用download_token函数,返回真正的下载url
let realUrl = qiniu_auth.download_token({ AccessKey: '<Your AccessKey>', SecretKey: '<Your SecretKey>', url: 'http://xxx/test.js' });
// realUrl: http://xxx/test.js?e=1545723182&token=<Your AccessKey>:e9agnim21L6o7EUaC7sCDXtz3VA=
```
### Pandora-API签名
qiniu_auth.pandora(options); 默认使用token签名
qiniu_auth.pandora.AK_SK(options); 也可以使用AK_SK签名
[官方文档](https://developer.qiniu.com/insight/api/4814/the-api-signature)
options有7个参数属性:
- method,string,必选,请求的方法
- path,string,必选,请求的路径
- query,object,可选,请求的参数
- headers,object,可选,请求头信息
- expires,object,可选,过期时间,默认是一个小时
- options.AccessKey 可选,七牛云给你的密钥之一,this.AccessKey和options.AccessKey必须要选一
- options.SecretKey 可选,七牛云给你的密钥之一,this.SecretKey和options.SecretKey必须要选一
```javascript
let path = '/v2/repos/' + Date.now() + '/data';
// 生成api签名
let auth = qiniu_auth.pandora({
AccessKey: '<Your AccessKey>',
SecretKey: '<Your SecretKey>'
method: 'POST',
path: path,
headers: {
'content-type': 'text/plain'
}
});
// 也可以使用AK_SK签名
// auth = qiniu_auth.pandora.AK_SK({
// AccessKey: '<Your AccessKey>',
// SecretKey: '<Your SecretKey>'
// method: 'POST',
// path: path,
// headers: {
// 'content-type': 'text/plain'
// }
// });
await rp({
url: 'https://nb-pipeline.qiniuapi.com' + path,
method: 'POST',
headers: {
'content-type': 'text/plain',
'Authorization': auth
},
body: 'userName=小张\tage=12\taddresses=beijing\nuserName=小王\tage=13\taddresses=hangzhou'
});
```
## HTTP请求鉴权
qiniu_auth.qiniu_token(options);
[官方文档](https://developer.qiniu.com/pili/api/2772/http-requests-authentication)
options有8个参数属性:
- url,string,必选,请求的url
- method,string,必选,请求的方法
- query,string || object,可选,请求的query部分,如果是object会被qs.stringify,如果指定query参数会替换掉原url的query部分
- headers,object,可选,请求头信息
- body,object,可选,请求信息
- ContentType,string,可选,请求的Content-Type
- options.AccessKey 可选,七牛云给你的密钥之一,this.AccessKey和options.AccessKey必须要选一
- options.SecretKey 可选,七牛云给你的密钥之一,this.SecretKey和options.SecretKey必须要选一
```javascript
// 使用图片审核举例:
// 生成HTTP请求鉴权
let auth = qiniu_auth.qiniu_token({
AccessKey: '<Your AccessKey>',
SecretKey: '<Your SecretKey>',
url: 'http://argus.atlab.ai/v1/image/censor',
method: 'POST',
body: {
data: { uri: 'http://xxx/test.jpg' },
params: { type: ["pulp", "terror", "politician"], detail: false }
},
headers: {
'Content-Type': 'application/json'
}
});
// 使用HTTP请求鉴权发出请求
await rp({
url: 'http://argus.atlab.ai/v1/image/censor',
method: 'POST',
body: {
data: { uri: 'http://xxx/test.jpg' },
params: { type: ["pulp", "terror", "politician"], detail: false }
},
headers: {
'Content-Type': 'application/json',
'Authorization': auth
}
});
```
## EncodedEntryURI
qiniu_auth.encodedEntryURI(bucket, fileName);
有两个参数:
- bucket,string,必选,储存桶名称
- fileName,string,必选,文件名称
## HMAC-SHA1签名
qiniu_auth.hmac_sha1(key, str);
有两个参数:
- key,string,必选,加密的key
- str,string,必选,加密的字符串
## URL安全的Base64编码
qiniu_auth.urlsafe_base64_encode(url);
有1个参数:
- url,string,必选,需要编码的url字符串