# 物流园区权限校验
@baidu-map/logistics-encrypt 版本信息:
# 引入项目
# 1.CDN
<script src="https://unpkg.com/@baidu-map/logistics-encrypt@[版本号]/dist/index.umd.min.js"></script>
1
# 2.npm
npm install @baidu-map/logistics-encrypt --save
1
yarn add @baidu-map/logistics-encrypt
1
# API
# encryptionByRsa
rsa 加密算法
encryptionByRsa(str:加密文本,key:加密密钥);
export default () => {
const str = '一段需要加密的文本';
const key =
'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJdT+sk/hgC3F31mDqHLSitgIMNPXuStfbJRoL4xq0Kp7CZpaULoKDQ6fEbeONHrEkL0tq1w5WqxCa0BZ0uY0KTVFuJ/9n0fVIYpgscUigPCpYRrASYO2D49Hef2V1/bvgYIJDGydlfKRCDHaspm0SEoT9hJZfOqd2aoPpw8W5yQIDAQAB';
return (
<div>
<div style={{ wordBreak: 'break-all' }}>加密之前:{str}</div>
<div style={{ wordBreak: 'break-all' }}>加密之后:{encryptionByRsa(str, key)}</div>
</div>
);
};
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# decryptionByDes
对称解密
decryptionByDes(str:解密文本,key:解密密钥);
import { decryptionByDes } from '@baidu-map/logistics-encrypt';
export default () => {
const str =
'+8M48O0SPZBfAbvPDiD/h7ud5gA50BAZ3AF2ARtbnMkFQGOVtlpeYSSAAJybaHx9SOFQRXcdEqtZIAJvmdiJHvLyi8+H5kog+QQcIY3Q69VyrbKUt7wCJEMK+ZTHKcWAw+Na4mojX+yJB0ry0qVvcwJwsF6mwhmZy7SaGpwNYWkuTdwFGDXZC0zRgAWJ2q6Ecmk9kb9a01hhQ7b77aHcXA1NtqpNuprSrIgGkeVnJcd49k39Pyp7PRFVIeM6wTzWZIpAV2smyOldzX/rccR5DfaippNS/4r4aorwWzUDl0n3uOUd8+eDNUOKCV39nrljFMPxZOruu+4UYW/lBGOi37kiW65QsXDrkJ1vvHSX5HE1NYh94B1O1BkNdMVRORAn4mEdOZReGfHSu1ifB4KM1Q0x//tJHjRClGlhCOLhOhRSvOYYmqllTdVtpYXBywHbKnA+4ACxrmqxsngEHXlN5ueR0pC9qtLbHIIiNCxqGzbOYRa31UF+nPQ4N7SKHTClE2I98qX16kb1f658r1yoy+okdygAgI3QRvDLrpyRFMQxc6UTKCEPHsUwdXGn825Mi8g6+25Mk0LlFdXLqRkR8CPKazl3yrdC51ntQiipG30CtNCDZ5UzUGzSBEUmoDRokp3sWVH6AMt4o1YAoe5eVEakrs9rLokn/p+fOGxLjoarPtc7D2lBaJAM+O9/U//IcFpFnpwrPPPFKayUxLBIXVM+cqyy3+bTtkUrSvUeBcodm+fCLqcsuFY1Vvs+CUKbpql4f7kLzUnV07fALnIKbwtQ5GVjnm+pk3O3u3wcx4TIRpLLR+OXWTtSvkBhrGak5Ftwv/H1JKkdZzoDmHuKbrEy5mcXo1SPFWhrfkpi9Bs=';
const key = '2d0b75c5';
return (
<div>
<div style={{ wordBreak: 'break-all' }}>解密之前:{str}</div>
<div style={{ wordBreak: 'break-all' }}>解密之后:{decryptionByDes(str, key)}</div>
</div>
);
};
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
# generateAuthorization
百度云签名加密
generateAuthorization(Authorization);
import { generateAuthorization } from '@baidu-map/logistics-encrypt';
export default () => {
const params = {
accessKey: '9880ed5518e244cf8051cc25a06ac566',
secretKey: 'ce7122ec52b34538b9739e5524faba2d',
path: '/logistics_park/v2/image',
params: {
callback: 'jsonp_1675135528543_44608',
},
header: {
host: 'apitest.map.baidu.com',
},
method: 'GET',
};
return (
<div>
<div>
加密参数 <pre>{JSON.stringify(params, null, 2)}</pre>
</div>
<div>
百度云header:
<pre>{JSON.stringify(generateAuthorization(params), null, 2)}</pre>
</div>
</div>
);
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# STS
bos 临时授权类
new STS(STSOptions)
let sts = new STS({
/**
* 获取密钥
*/
getPublic: async () => {
return { publicKey, publicKeyId };
},
/**
* 获取auth授权
*/
getAuth: async ({ data, publicKeyId }) => {
return result; // auth 加密结果
},
authSplit: '|', // auth 加密结果分割符,不用传,基本auth模块都是用"|"分割
stsUrl: 'stsurl', // 临时授权sts地址
tokenSplit: '|', // sts 返回结果分割符,不知道后端会用啥分割,有的用 | 有的用 , 默认是|
onReady: () => {}, // 初始化完成回调 在这里可以进行直连bos了,数据都准备好了
});
sts.getOptions(); // X,Y,ID,SK,ak,sk,publicKey,publicKeyId,sessionToken 等数据
sts.destroy(); // 销毁,因为getAuth,sts 都是有轮训的,他们是加密数据,所以离开页面时进行卸载,防止内存泄漏
sts.getAuthorization(url, [Authorization]); // 根据url生成直连bos的header 返回 [Authorization,x-bce-date,x-bce-security-token] 本质是调用的 generateAuthorization 方法,如果有自己配置可以传第二个方法覆盖配置,或者直接使用 generateAuthorization 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# Gateway
网关直连,临时授权类
new Gateway(GatewayOptions)
let gateway = new Gateway({
/**
* 获取密钥
*/
getPublic: async () => {
return { publicKey, publicKeyId };
},
/**
* 获取auth授权
*/
getAuth: async ({ data, publicKeyId }) => {
return result; // auth 加密结果
},
authSplit: '|', // auth 加密结果分割符,不用传,基本auth模块都是用"|"分割
onReady: () => {}, // 初始化完成回调 在这里可以进行直连bos了,数据都准备好了
});
gateway.getOptions(); // X,Y,ID,SK,ak,sk,publicKey,publicKeyId,sessionToken 等数据
gateway.destroy(); // 销毁,因为getAuth,sts 都是有轮训的,他们是加密数据,所以离开页面时进行卸载,防止内存泄漏
gateway.getAuthorization(url, [Authorization]); // 根据url生成直连bos的header 返回 [Authorization,x-bce-date] 本质是调用的 generateAuthorization 方法,如果有自己配置可以传第二个方法覆盖配置,或者直接使用 generateAuthorization 方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# fetchJsonp
jsonp 请求
await fetchJsonp(url, fetchJsonpOptions);
const data = await fetchJsonp('http://www.baidu.com');
1
# generateCallbackFunction
生成随机回调函数名,配合fetchJsonp使用
const data = await fetchJsonp('http://www.baidu.com', {
jsonpCallbackFunction: generateCallbackFunction(),
});
1
2
3
2
3
# parseQueryString
解析 queryString 字符串
let data = parseQueryString('?a=1&b=2');
console.log(data); // {a:1,b:2}
1
2
2
# stringfyQueryString
对象序列化
let string = stringifyQueryString({ a: 1, b: 2 });
console.log(string); // a=1&b=2
1
2
2
# 数据类型
# Authorization
详细数据这里 (opens new window) 查找
| 参数 | 说明 | 类型 |
|---|---|---|
| accessKey | Access Key ID | string |
| secretKey | 为用户的 Secret Access Key | string |
| path | 要求绝对路径 Path 必须以“/”开头,不以“/”开头的需要补充上,空路径为“/” | string |
| params | 放在请求头上的请求参数 | object |
| header | 需要特殊携带的请求头 | object |
| method | 请求方式 | string |
# STSOptions
| 参数 | 是否必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| getPublic | 是 | function \| promise | none | 获取密钥 |
| getAuth | 是 | function \| promise | none | 获取auth授权 |
| authSplit | 否 | string | \| | auth 加密结果分割符,不用传,基本auth模块都是用"\|"分割 |
| stsUrl | 是 | string | none | 临时授权sts地址 要传全路径 包括http |
| tokenSplit | 否 | string | \| | sts 返回结果分割符,不知道后端会用啥分割,有的用 \| 有的用 , 默认是\ |
| onReady | 否 | function | none | 初始化完成回调 在这里可以进行直连 bos 了,数据都准备好了 |
# GatewayOptions
| 参数 | 是否必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| getPublic | 是 | function \| promise | none | 获取密钥 |
| getAuth | 是 | function \| promise | none | 获取auth授权 |
| authSplit | 否 | string | \| | auth 加密结果分割符,不用传,基本auth模块都是用"\|"分割 |
| onReady | 否 | function | none | 初始化完成回调 在这里可以进行直连 bos 了,数据都准备好了 |
# fetchJsonpOptions
| 参数 | 是否必填 | 类型 | 默认值 | 说明 |
|---|---|---|---|---|
| timeout | 否 | number | 5000ms | jsonp请求超时时间 |
| jsonpCallback | 否 | string | callback | 回调参数名 |
| jsonpCallbackFunction | 否 | string | 随机数 | 回调函数名(在做Authorization加密时用到)可以配合generateCallbackFunction使用 |