# 物流园区权限校验

@baidu-map/logistics-encrypt 版本信息:npm-version

# 引入项目

# 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

# 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

# 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

# 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

# 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

# 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

# parseQueryString

解析 queryString 字符串

let data = parseQueryString('?a=1&b=2');
console.log(data); // {a:1,b:2}
1
2

# stringfyQueryString

对象序列化

let string = stringifyQueryString({ a: 1, b: 2 });
console.log(string); // a=1&b=2
1
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使用