完成服务端认证

更新时间:
2023-08-09
下载文档

完成服务端认证

本章主要介绍服务端如何通过 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 的方法:

  1. 在开发环境执行以下命令,安装 @edgeros/web-sdk 包。
npm install @edgeros/web-sdk
  1. 在 src 目录下创建服务文件夹 src/service, 并在 service 文件下创建文件 api.ts 和 edger.ts。

  2. 参考以下示例,在 api.ts 中创建 Token 和 Srand 变量并导出。

//api.ts 示例代码
export const tokenRef = { token: "", srand: "" };
  1. 参考以下示例,在 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;
});
  1. 参考以下示例,将 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() });
  },
};
文档内容是否对您有所帮助?
有帮助
没帮助