完成服务端认证
本章主要介绍服务端如何通过 RESTful 接口与爱智进行安全通信。
概述
爱智为通信安全提供了基于 Token 和随机数 Srand 的双重保障,两项验证均通过才能完成通信。随机数以分钟级进行刷新,过期随机数无法通过安全验证。
使用说明
获取 Token 和 Srand
爱智提供以下两种方式获取 Token 与 Srand:
- 主动获取
import { edger } from "@edgeros/web-sdk";
import { tokenRef } from "@/service/api";
// 主动获取 token 并设置
edger
.token()
.then((data) => {
const { token, srand } = data;
tokenRef.token = token;
tokenRef.srand = srand;
})
.catch((error) => {
console.log(error);
});
- 被动获取
import { edger } from "@edgeros/web-sdk";
import { tokenRef } from "@/service/api";
// 监听 token 变化并更新
edger.onAction("token", (data) => {
const { token, srand } = data;
tokenRef.token = token;
tokenRef.srand = srand;
});
集成 Token 和 Srand
下面以 Vue 2 + Typescript 开发为例介绍 REST API 集成 Token 和 Srand 的方法:
- 在开发环境执行以下命令,安装 @edgeros/web-sdk 包。
npm install @edgeros/web-sdk
在 src 目录下创建服务文件夹 src/service, 并在 service 文件下创建文件 api.ts 和 edger.ts。
参考以下示例,在 api.ts 中创建 Token 和 Srand 变量并导出。
//api.ts 示例代码
export const tokenRef = { token: "", srand: "" };
- 参考以下示例,在 Vue 工程下的 main.ts( /项目名/src/main.ts) 文件中引入 @edgeros/web-sdk。
//main.ts 示例代码
import { edger } from "@edgeros/web-sdk";
import { tokenRef } from "@/service/api";
// 主动获取 token 并设置
edger.token().then((data) => {
const { token, srand } = data;
tokenRef.token = token;
tokenRef.srand = srand;
});
// 监听 token 变化并更新
edger.onAction("token", (data) => {
const { token, srand } = data;
tokenRef.token = token;
tokenRef.srand = srand;
});
- 参考以下示例,将 api.ts 引入到 edger.ts 中,读取 Token 和 Srand 应用到请求头的配置中。
//edger.ts 示例代码
import axios from "axios";
import { tokenRef } from "./api";
const axiosConfig = () => {
return {
// headers 中的 'edger-token' 和 'edger-srand' 为平台约定必传字段
headers: {
"edger-token": tokenRef.token,
"edger-srand": tokenRef.srand,
},
};
};
export default {
/**
* get 请求示例
*/
getAppInfo(): Promise<ApiResult> {
return axios.get("/app/get/info", { ...axiosConfig() });
},
/**
* post 请求示例
*/
updateAppInfo(name: string): Promise<ApiResult> {
return axios.post("/app/post/info", { name }, { ...axiosConfig() });
},
};