对接海康威视综合安防管理平台——调用认证

官方给的示例虽说很详细,但是对于我这个第一次对接三方平台的人来说还是很懵逼的,所以只能通过不断的测试摸索最后才得到了这个签名结果,作为记录以及为后来的人做参考。

认证方式:

  一:AK\SK摘要认证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
public static void test034(){
    try {
        /*请求数据信息*/
        // 请求地址:http://www.example.com/artemis/api/example?qa=a&qb=B
        // Http Method:POST
        // appKey:29666671
        // appSecret:empsl21ds3
        // X-Ca-Timestamp:1479968678000
 
        /* Headers*/
        // Accept:*/*
        // Accept-Encoding:gzip, deflate, sdch
        // Accept-Language:zh-CN,zh;q=0.8
        // Connection:keep-alive
        // Content-Length:0
        // Content-Type:text/plain;charset=UTF-8
        // Cookie:JSESSIONID=D9C4A515CACAC31211D1612039D062B7
        // header-A:A
        // header-B:b
        // X-Ca-Key:29666671
        // X-Ca-Signature-Headers:header-a,header-b,x-ca-key,x-ca-timestamp
        // X-Ca-Timestamp:1479968678000
        // X-Requested-With:XMLHttpRequest
 
        /*Query*/
        // qa:a
        // qb:B
 
        /*BodyForm*/
        // a-body:a
        // x-body:x
 
        /*签名字符串*/
        String stringToSign =
                "POST\n" +
                "*/*\n" +
                "text/plain;charset=UTF-8\n" +
                "header-a:A\n" +
                "header-b:b\n" +
                "x-ca-key:29666671\n" +
                "x-ca-timestamp:1479968678000\n" +
                "/artemis/api/example?a-body=a&qa=a&qb=B&x-body=x";
 
        // 请求数据中的 “appSecret”
        String secret = "empsl21ds3";
 
        //javax.crypto.Mac 加密解密(消息认证码)
        Mac hmacSHA256 = javax.crypto.Mac.getInstance("HmacSHA256");
        byte[] keyBytes = secret.getBytes("UTF-8");
        hmacSHA256.init(new SecretKeySpec(keyBytes, 0, keyBytes.length, "HmacSHA256"));
 
        // java.util.Base64 方式
        String sign1 = Base64.getEncoder().encodeToString(hmacSHA256.doFinal(stringToSign.getBytes("UTF-8")));
 
        // org.apache.commons.codec.binary.Base64 方式
        byte[] bytes = org.apache.commons.codec.binary.Base64.encodeBase64(hmacSHA256.doFinal(stringToSign.getBytes("UTF-8")));
        String sing2 = new String(bytes, "UTF-8");
 
        /**
         * 官方签名结果:JRpUpk1ETjzr5gsbo4qoEA9EiQPejvNz12B837xV5HI=
         */
        System.out.println(sign1); // JRpUpk1ETjzr5gsbo4qoEA9EiQPejvNz12B837xV5HI=
        System.out.println(sing2); // JRpUpk1ETjzr5gsbo4qoEA9EiQPejvNz12B837xV5HI=
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (InvalidKeyException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

 

 根据上述方法生成的 sign 签名,然后进行请求头数据的填充之后发送请求即可

请求头数据示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
// 简单的请求头Header数据
Accept:*/*
Content-Type:application/json
x-ca-key:(给的appkey)
x-ca-signature-headers:x-ca-key(参与计算签名的请求头,具体哪些不需要文档中写有)
x-ca-signature:(value是生成的签名)
 
// 例如:
Accept:*/*
Content-Type:application/json
x-ca-key:00000000
x-ca-signature-headers:x-ca-key
x-ca-signature:RHhiW7WMDZUEXmgjzJZMsLFJ8RWGR3+ffXIQI=

  

将请求头填充好后可之际发送请求

 

  二:access_token认证

(未看,待续)

  三:关于认证

  海康已经给出了相关的安全认证库,我们只需要在项目中引入认证库依赖包,然后将相关参数配置进去,之后调用给的认证包中的请求工具去调用接口即可,关于上面的这些调用认证都不需要我们手动去生成签名然后再去调用接口认证。下面引用官方文档中的描述:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
综合安防管理平台提供了OpenAPI安全认证库(Java、C++、C#、C)快速实现接口调用。
 
Java实现接口调用步骤如下:
 
1.新建Java工程,从Hikvision AI Cloud开放平台网站(https://open.hikvision.com/download/)上下载“OpenAPI安全认证库(Java)”,获取artemis-http-client.jar,导入到Java工程中。安全认证库已上传公网仓库,maven依赖坐标:
 
 
<dependency>
    <groupId>com.hikvision.ga</groupId>
    <artifactId>artemis-http-client</artifactId>
    <version>1.1.3</version>
</dependency>
 
 
2.设置认证信息,设置ArtemisConfig的host,appKey(AK),appSecret(SK)。
 
3.设置接口URL。
 
4.设置接口入参。
 
5.接口调用,调用doPostStringArtemis方法(该方法内部实现了登入认证逻辑),传入接口URL,接口入参,数据提交类型等信息,完成接口调用。

  

 

作者:假装空白
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

posted @   假装空白  阅读(5449)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示