为了保障系统安全,通过 OpenAPIs 或北向接口访问系统需要进行安全认证。专业版及以上版本的系统可以通过应用管理创建Access Key和Secret Key进行认证。
Devoloplink IOT提供OpenAPIs功能,方便第三方应用直接调用系统相关的开发接口。该接口是通过AK/SK的方式进行鉴权。需要调用方跟据Secret Key与Access Key值计算签名。
ak/sk是一种身份认证方式,常用于系统间接口调用时的身份验证,其中ak为Access Key ID,sk为Secret Access Key。客户端和服务端两者会协商保存一份相同的sk,其中sk必须保密。
客户端在调用的服务端接口时候,会带一下参数进行请求,在服务端接收到这个请求的时候,首先会根据ak去数据库里面去找到对应的sk,然后使用sk对请求内容进行加密得到一个签名,然后对比客户端传过来的签名和服务端计算的出来的签名是否一致,如果一致则代表身份认证通过,反之则不通过。
public static void main(String[] args) {
String ak = "123456";
String sk = "P2AH1KSJ";
Long authId = 9L;
long time = System.currentTimeMillis();
System.out.println(time);
String message = "ak=" + ak + "&authId=" + authId + "&time=" + time;
try {
SecretKeySpec keySpec = new SecretKeySpec(
sk.getBytes(StandardCharsets.UTF_8), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
byte[] rawHmac = mac.doFinal(message.getBytes(StandardCharsets.UTF_8));
String sign = DatatypeConverter.printHexBinary(rawHmac).toLowerCase();
System.out.println(sign);
} catch (Exception e) {
throw new RuntimeException("Unable to generate HMAC : " + e.getMessage(), e);
}
}