签名

tacos-sdk从新版v2.0.0版本开始,接入空间引擎将启用数字签名校验。为了保障数据的更加安全和私有化,所有上层项目应用调用sdk接口(http or websocket)都需要对指定信息做签名(前后端约定采用SHA256withRSA签名算法生成签名)并按要求携带签名信息,然后统一由数字空间验证签名合法性和有效性。

接入步骤

一、应用申请授权

业务使用方在空间管理平台open in new window中申请授权,获取到对应的应用编码appCode, 以及授权私钥privateKey

二、初始化连接透传appCode

import Tacos from "@tslfe/tacos-sdk";

Tacos.connect({
    appCode: "应用编码"//此参数为必传项
    request: {
      baseURL: "<应用接口根路径域名>"
    },
    socket:{
      url: "<空间与设备通讯连接地址>" // 指定websoket地址
    }
})

三、全局拦截器拦截全局接口请求进行数字签名处理

http请求拦截有两种处理方式

前端生成数字签名方式:一般适用于纯前端项目,没有对应的业务后端。不建议这种方式(签名密钥放置前端有暴露安全风险)

import Tacos, { httpSignInterceptor, Root } from "@tslfe/tacos-sdk";
const privateKey = `-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCVcQVHrjrJTcSrFUyCLlJnqJd8bIPG37OggdD4yLXJK6ryRqYK1jfxS45/MegoVRUUiDn//DogMMoBW4rv2WDPDG5P0jgU4gS/BjWdPDMc69bVRVomjQYg8Eoj+ipuJ4GzVVQZdSw8PNutKLUwW4kQP/57DCCDxh0VDwLVQ0W47ivrFZqwoiqj8SEWacxZiQAy0bkQJVtoRlkbLFCYLBylX+fI/aJUI+oFszxWIGvTlT//MB6nfBYPbC+EBZIow4xnAhpgyHKmFdh52SoZF1++0hqRH/SaZfW4i54iSIh2xsWUDHAPe3DyH+f/KaMggGtB8N6Z0NGi74u4anE4dx73AgMBAAECggEAJ4mWZweOoBHGNalV659LyAcPxSiEmMo4oP+XhSq9BbNa7+yHI5jXhiyCT96pWHpiMGN2TOazji66Uy+gC6MMfNsCGHY6xjOiI9QFvUrfDwjKdvR5THfFJlPMmcYnEau8IfEyZeXdRTaovCBoB5pAIh98OZvUwmhY62hkTH4W5T0bfz7JkUtgZL6aADkRaRZDIN6KZloiF4+1aQ4bzJfzE/02uTIrA4vvzDiHRfsJ8dLFr2oJBYaOoR1TauryX2cwln0FrR2Jl+91kd0NHvq8mEc6fYVLiX185fIoteb/RSa4kAUNBXz0dsoTHHMWExKb9hsDZgeQIXmUL7xnFgCkCQKBgQD7BSkl0qKz1Vj1TJtzfSayReTb3Po+gD/Ww9rHYS4Wb0guQBANWBF6Qd+PAn2VPkZmsTuG84RryIKG1RJE+2qVyuOgRU8BQgdrOEYsfAOT1TmD/zK2ubHASr46insH3c53EtPUt1NeNW4cS5ylxVa+YsIf6/RmI72S2AMcKLZSswKBgQCYZ/ql2rEGgdWYQA2abWPZ+or8oodH0POccrLlBjbjB1RaBJTf1GLS3H5NTmemGVXiSxScMqb5sxeZDx7O0XXXtnMiNnmu91hjlKi5Xz8A4w7avbEL37bgFZHCu+BiKnko6x38aZBp+A3h/OW7E4ubaOP8N2+xRdrDivudIqfUrQKBgBrCABLiEynsUiFD20ZCTv+t56lwMtS6wxNXqVibiVgm4KDdf1iMzMAliXkrIMvp6YNE3T2Tc8gxhYht6hakXkY9bGpHORa/PR82znQrfA4kKo9hgrxrqwD+dqyy2k6KXFnhDeec6ywdsfEeNkKNeKOuz1arxk+k+65NjHdR9611AoGADZXnP/WYpi3YrnO3QrbRmdK9pPuP95TmwmFvFP9S0TYMDOIvqywxiv5gu99rWeEUSNHMiofxXnzac6hnZKRDTvFSnhAhFLmzxVyxFaUp5phW8KTMLXTJxnvlvGgm/lku57jduWxnlSqpgiWbDOwXG8lj2U3PxQunDptLBpzaPRkCgYB6M7BRbSzyqixow8OrUbZZBHtt++rvbVthMtSdWaFajNCegNjdpigEa0ZvyF4P95Phz3beEw20IBvsxhX7FyJ4hp/vbLXXETtzIFxD90CX+uBsn1R1Stef0p5XS4PNowAvsx178jQ/cgOuWi5sYjP+Op1pXDxgo/QnqUqKzxXsKA==
-----END PRIVATE KEY-----
`;
Tacos.connect({
   ...
}).then(async (sdk)=>{
    sdk.interceptor("ajax").request(httpSignInterceptor(privateKey));

    const root = sdk.createInstance(Root);
    const device = await root.search<Device>("/Office/devices/*");
    ...
})

业务后端ng代理生成方式:数字签名由业务对应后端通过Nginx代理方式,服务端自行生成签名后再分配相应的token给业务方前端调用;推荐方式

 ...
 sdk.interceptor("ajax").request((config: RequestConfig) => {
     config.headers.common["业务方自定约定的token请求头"] = "token";
     return config;
 });
 ...
websokcet请求拦截

Tacos-sdk已经自动内置处理,业务方调用无须额外处理

上次更新:
贡献者: jiang.tao, zhengqian