认证token生成

一、简介

访问密钥,分为服务器端密钥客户端密钥,认证token的生成方式完全相同
服务器端密钥:请保存在服务器端,用于管理识别目标,如添加,启用,停用等操作,请妥善保管,以免泄漏导至识别目标被篡改。
客户端密钥:用于APP端访问搜索识别接口,可在HTML5、微信小程序等中使用。

二、代码实现

1. Java代码

// 基本信息
String accessKey = "6e59b44afb904ffa9d628e69b18c14a0";
String accessSecret = "b60e17e39dca45bf9e2d5b393ee823c45b21218456494cf19cd12fe4fd036e5e";

// 将基本信息转换为JSON字符串 (这里设置的有效为3600秒)
String json = String.format("{\"accessKey\":\"%s\",\"expires\":%d}", 
                accessKey, System.currentTimeMillis() + 3600 * 1000);

// 计算签名,拼接JSON字符串与访问密钥,再使用sha256哈希生成签名
String signature = sha256(json + accessSecret);

// 原始token数据
String raw = signature + json;

// 转换为base64编码, 此token为最终的认证token, 在有效期内无需重新生成
String token = Base64.getEncoder().encodeToString(raw.getBytes(StandardCharsets.UTF_8));

完整代码请查看: https://github.com/wujianar/token-java

2. PHP代码

// 基本信息
$accessKey = '6e59b44afb904ffa9d628e69b18c14a0';
$accessSecret = 'b60e17e39dca45bf9e2d5b393ee823c45b21218456494cf19cd12fe4fd036e5e';

$arr = [
    // 服务器或客户端密钥
    'accessKey' => $accessKey ,
    // 有效期3600秒(时间戳),使用毫秒
    'expires' => (time() + 3600) * 1000
];

// 转换为JSON字符串
$json = json_encode($arr);

// 计算签名,拼接JSON字符串与访问密钥,再使用sha256哈希生成签名
$signature = hash('sha256', $json . $accessSecret);

// 原始token数据
$raw = $signature . $json;

// 转换为base64编码, 此token为最终的认证token, 在有效期内无需重新生成
$token = base64_encode($raw);

完整代码请查看: https://github.com/wujianar/token-php

3. JavaScript代码

// 基本信息
const accessKey = '6e59b44afb904ffa9d628e69b18c14a0';
const accessSecret = 'b60e17e39dca45bf9e2d5b393ee823c45b21218456494cf19cd12fe4fd036e5e';

const arr = {
    // 服务器或客户端密钥
    'accessKey': accessKey,
    // 有效期3600秒(时间戳),使用毫秒
    'expires': Date.now() + 3600 * 1000
};

// 转换为JSON字符串
const json = JSON.stringify(arr);

// 计算签名,拼接JSON字符串与访问密钥,再使用sha256哈希生成签名
const signature = sha256(json + accessSecret);

// 原始token数据
const raw = signature + json;

// 转换为base64编码, 此token为最终的认证token, 在有效期内无需重新生成
return base64Encode(raw);

4. 在本站生成

查看密钥 -> 客户端密钥 -> 选择有效期,复制出Token。

完整代码请查看: https://github.com/wujianar/token-javascript