阿里云物联网平台一型一密获取:DeviceSecret 示例

简介: 本文主要演示如何使用JAVA SDK动态获取DeviceSecret。

作者:俏巴

概述


一型一密安全认证方式下,同一产品下所有设备可以烧录相同固件(即烧录ProductKey和ProductSecret)。设备发送激活请求时,物联网平台进行身份确认,认证通过,下发该设备对应的DeviceSecret。本文主要演示如何使用JAVA SDK动态获取DeviceSecret。


操作步骤


1、在阿里云物联网平台控制台,创建产品。
_


2、在已创建产品的产品详情页面,开启动态注册开关。
_


3、在该产品下,添加设备。添加成功的设备状态为未激活。因设备激活时会校验DeviceName,建议您采用可以直接从设备中读取到的ID,如设备的MAC地址、IMEI或SN号等,作为DeviceName使用。
_
4、程序调用


4.1 pom.xml


    <span class="xml"><span class="hljs-tag"><<span class="hljs-name">repository</span>></span>
        <span class="hljs-tag"><<span class="hljs-name">id</span>></span>alimaven<span class="hljs-tag"></<span class="hljs-name">id</span>></span>
        <span class="hljs-tag"><<span class="hljs-name">name</span>></span>aliyun maven<span class="hljs-tag"></<span class="hljs-name">name</span>></span>
        <span class="hljs-tag"><<span class="hljs-name">url</span>></span>http://maven.aliyun.com/nexus/content/groups/public/<span class="hljs-tag"></<span class="hljs-name">url</span>></span>
    <span class="hljs-tag"></<span class="hljs-name">repository</span>></span></span>
<<span class="hljs-regexp">/repositories>

<dependencies>
    <dependency>
        <groupId>com.aliyun.alink.linksdk</g</span>roupId>
        <span class="xml"><span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>iot-linkkit-java<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span></span>
        <version><span class="hljs-number">1.2</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span><<span class="hljs-regexp">/version>
        <scope>compile</</span>scope>
    <span class="xml"><span class="hljs-tag"></<span class="hljs-name">dependency</span>></span></span>
    <dependency>
        <span class="xml"><span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>com.google.code.gson<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span></span>
        <artifactId>gson<<span class="hljs-regexp">/artifactId>
        <version>2.8.1</</span>version>
        <span class="xml"><span class="hljs-tag"><<span class="hljs-name">scope</span>></span>compile<span class="hljs-tag"></<span class="hljs-name">scope</span>></span></span>
    <<span class="hljs-regexp">/dependency>
    <dependency>
        <groupId>com.alibaba</g</span>roupId>
        <span class="xml"><span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>fastjson<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span></span>
        <version><span class="hljs-number">1.2</span><span class="hljs-number">.40</span><<span class="hljs-regexp">/version>
        <scope>compile</</span>scope>
    <span class="xml"><span class="hljs-tag"></<span class="hljs-name">dependency</span>></span></span>
<<span class="hljs-regexp">/dependencies>
<build>
    <finalName>iot-java-sdk</</span>finalName>
    <span class="xml"><span class="hljs-tag"><<span class="hljs-name">plugins</span>></span>
        <span class="hljs-tag"><<span class="hljs-name">plugin</span>></span>
            <span class="hljs-tag"><<span class="hljs-name">groupId</span>></span>org.apache.maven.plugins<span class="hljs-tag"></<span class="hljs-name">groupId</span>></span>
            <span class="hljs-tag"><<span class="hljs-name">artifactId</span>></span>maven-compiler-plugin<span class="hljs-tag"></<span class="hljs-name">artifactId</span>></span>
            <span class="hljs-tag"><<span class="hljs-name">configuration</span>></span>
                <span class="hljs-tag"><<span class="hljs-name">source</span>></span>1.8<span class="hljs-tag"></<span class="hljs-name">source</span>></span>
                <span class="hljs-tag"><<span class="hljs-name">target</span>></span>1.8<span class="hljs-tag"></<span class="hljs-name">target</span>></span>
                <span class="hljs-tag"><<span class="hljs-name">encoding</span>></span>UTF-8<span class="hljs-tag"></<span class="hljs-name">encoding</span>></span>
            <span class="hljs-tag"></<span class="hljs-name">configuration</span>></span>
        <span class="hljs-tag"></<span class="hljs-name">plugin</span>></span>
    <span class="hljs-tag"></<span class="hljs-name">plugins</span>></span></span>
<<span class="hljs-regexp">/build></span></code></pre>

4.2 Code Sample


import com.aliyun.alink.apiclient.CommonRequest;
import com.aliyun.alink.apiclient.CommonResponse;
import com.aliyun.alink.apiclient.IoTCallback;
import com.aliyun.alink.apiclient.utils.StringUtils;
import com.aliyun.alink.dm.api.DeviceInfo;
import com.aliyun.alink.dm.api.IoTApiClientConfig;
import com.aliyun.alink.dm.model.ResponseModel;
import com.aliyun.alink.linkkit.api.IoTMqttClientConfig;
import com.aliyun.alink.linkkit.api.LinkKit;
import com.aliyun.alink.linkkit.api.LinkKitInitParams;
import com.aliyun.alink.linksdk.tools.ALog;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.util.Map;

// 动态获取设备Secret
public class GetDeviceSecret {

private <span class="hljs-keyword">static</span> final <span class="hljs-built_in">String</span> TAG = <span class="hljs-string">"GetDeviceSecret"</span>;

public <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> main(<span class="hljs-built_in">String</span>[] args) {

    DeviceInfo deviceInfo = <span class="hljs-keyword">new</span> DeviceInfo();
    deviceInfo.productKey = <span class="hljs-string">"********"</span>;
    deviceInfo.deviceName = <span class="hljs-string">"********"</span>;
    deviceInfo.productSecret = <span class="hljs-string">"********"</span>;

    LinkKitInitParams params = <span class="hljs-keyword">new</span> LinkKitInitParams();
    IoTMqttClientConfig config = <span class="hljs-keyword">new</span> IoTMqttClientConfig();
    config.productKey = deviceInfo.productKey;
    config.deviceName = deviceInfo.deviceName;
    params.mqttClientConfig = config;
    params.connectConfig = <span class="hljs-keyword">new</span> IoTApiClientConfig();
    params.deviceInfo = deviceInfo;

    final CommonRequest request = <span class="hljs-keyword">new</span> CommonRequest();
    request.setPath(<span class="hljs-string">"/auth/register/device"</span>);
    LinkKit.getInstance().deviceRegister(params, request, <span class="hljs-keyword">new</span> IoTCallback() {
        public <span class="hljs-keyword">void</span> onFailure(CommonRequest commonRequest, Exception e) {
            ALog.e(TAG, <span class="hljs-string">"动态注册失败 "</span> + e);
        }

        public <span class="hljs-keyword">void</span> onResponse(CommonRequest commonRequest, CommonResponse commonResponse) {
            <span class="hljs-keyword">if</span> (commonResponse == <span class="hljs-literal">null</span> || StringUtils.isEmptyString(commonResponse.getData())) {
                ALog.e(TAG, <span class="hljs-string">"动态注册失败 response=null"</span>);
                <span class="hljs-keyword">return</span>;
            }
            <span class="hljs-keyword">try</span> {
                ResponseModel<<span class="hljs-built_in">Map</span><<span class="hljs-built_in">String</span>, <span class="hljs-built_in">String</span>>> response = <span class="hljs-keyword">new</span> Gson().fromJson(commonResponse.getData(), <span class="hljs-keyword">new</span> TypeToken<ResponseModel<<span class="hljs-built_in">Map</span><<span class="hljs-built_in">String</span>, <span class="hljs-built_in">String</span>>>>() {
                }.getType());
                <span class="hljs-keyword">if</span> (response != <span class="hljs-literal">null</span> && <span class="hljs-string">"200"</span>.equals(response.code)) {
                    ALog.d(TAG, <span class="hljs-string">"register success "</span> + (commonResponse == <span class="hljs-literal">null</span> ? <span class="hljs-string">""</span> : commonResponse.getData()));
                    <span class="hljs-comment">/**  获取 deviceSecret, 存储到本地,然后执行初始化建联
                     * 这个流程只能走一次,获取到 secret 之后,下次启动需要读取本地存储的三元组,
                     * 直接执行初始化建联,不可以再走动态初始化
                     */</span>
                    <span class="hljs-built_in">String</span> deviceSecret = response.data.get(<span class="hljs-string">"deviceSecret"</span>);
                    System.out.println(<span class="hljs-string">"deviceSecret: "</span> + deviceSecret);
                }
            } <span class="hljs-keyword">catch</span> (Exception e) {
                ALog.d(TAG, e.getMessage());
            }
            ALog.d(TAG, <span class="hljs-string">"register fail "</span> + commonResponse.getData());
        }
    });
}

}


4.3 运行结果


_


5、注意事项



5.1 未激活的设备,使用ProductKey、DeviceName,可以反复注册获取DeviceSecret,每次获取的DeviceSecret都不同。已激活的设备,DeviceSecret唯一。若需要重新激活该设备,请首先在物联网平台上删除设备,重新注册,使用新的ProductKey、DeviceName获取DeviceSecret。


5.2 采用一型一密方式认证,设备烧录相同固件,存在产品证书泄露风险。您可以在产品详情页面,手动关闭动态注册开关,拒绝新设备的认证请求。


5.3 若设备发出激活请求时,系统校验发现该开关未开启,将拒绝新设备的动态激活请求。已激活设备不受影响。



参考链接


一型一密


云端Java SDK使用说明

相关实践学习
钉钉群中如何接收IoT温控器数据告警通知
本实验主要介绍如何将温控器设备以MQTT协议接入IoT物联网平台,通过云产品流转到函数计算FC,调用钉钉群机器人API,实时推送温湿度消息到钉钉群。
阿里云AIoT物联网开发实战
本课程将由物联网专家带你熟悉阿里云AIoT物联网领域全套云产品,7天轻松搭建基于Arduino的端到端物联网场景应用。 开始学习前,请先开通下方两个云产品,让学习更流畅: IoT物联网平台:https://iot.console.aliyun.com/ LinkWAN物联网络管理平台:https://linkwan.console.aliyun.com/service-open
相关文章
|
1月前
|
存储 边缘计算 物联网
阿里云物联网平台:推动万物互联的智能化解决方案
随着物联网技术的快速发展,阿里云物联网平台为企业提供了一体化的解决方案,包括设备接入、数据管理和智能应用等核心功能。平台支持海量设备接入、实时数据采集与存储、边缘计算,并具备大规模设备管理、高安全性和开放生态等优势。广泛应用于智能制造、智慧城市和智能家居等领域,助力企业实现数字化转型。
156 5
|
4月前
|
存储 运维 监控
阿里云物联网平台的优势
【7月更文挑战第19天】阿里云物联网平台的优势
75 1
|
6月前
|
Cloud Native 安全 物联网
【阿里云云原生专栏】云边端一体化:阿里云如何利用云原生技术赋能物联网
【5月更文挑战第22天】阿里云借助云原生技术赋能物联网,实现云边端一体化,提升系统弹性与敏捷性。通过容器化部署,保证高可用性与可靠性。在智能交通等领域,阿里云提供高效解决方案,实现实时数据分析与决策。代码示例展示如何使用阿里云服务处理物联网数据。同时,阿里云重视数据安全,采用加密和访问控制保障数据隐私。丰富的工具和服务支持开发者构建物联网应用,推动技术广泛应用与发展。
372 1
|
6月前
|
消息中间件 存储 JavaScript
阿里云IOC物联网异步处理基础概念
该内容介绍了异步处理基础和消息队列的相关概念。首先,同步处理指任务完成后才能执行其他操作,而异步则允许任务并行执行,不阻塞程序。异步能提高系统并发性和响应性,但也增加复杂性和资源消耗。接着,提到了消息队列,包括生产者、消费者、队列、broker和topic等概念,并指出在IoT中,设备作为生产者发送消息到特定topic,消费者从队列获取数据。最后,简要介绍了AMQP协议,它是用于应用程序间消息传递的开放标准,常用于分布式系统和物联网,如RabbitMQ和Apache Qpid。课程将以Apache Qpid为例接收IoT数据。
225 6
阿里云IOC物联网异步处理基础概念
|
4天前
|
存储 安全 物联网
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
政府在推动物联网技术标准和规范的统一方面可以发挥哪些作用?
67 50
|
4天前
|
安全 物联网 物联网安全
制定统一的物联网技术标准和规范的难点有哪些?
制定统一的物联网技术标准和规范的难点有哪些?
16 2
|
4天前
|
存储 数据采集 物联网
物联网技术在物流领域的应用会遇到哪些挑战?
物联网技术在物流领域的应用会遇到哪些挑战?
17 4
|
6天前
|
存储 传感器 物联网
未来已来:区块链、物联网与虚拟现实技术融合的新篇章
【10月更文挑战第38天】本文旨在探索新兴技术区块链、物联网(IoT)和虚拟现实(VR)在未来社会的应用前景。通过分析这些技术的发展趋势,我们将揭示它们如何相互交织,共同塑造一个更智能、更互联的世界。文章将不包含传统意义上的摘要内容,而是直接深入主题,展开讨论。
|
7天前
|
供应链 监控 搜索推荐
物联网技术在物流领域的应用会带来哪些影响?
物联网技术在物流领域的应用会带来哪些影响?
31 2
|
7天前
|
传感器 存储 供应链
物联网技术在物流领域的应用实例有哪些?
物联网技术在物流领域的应用实例有哪些?
64 2

相关产品

  • 物联网平台