Terdapat dua metode autentikasi perangkat:
Sertifikat-unik-per-perangkat: Membakar sertifikat unik (ProductKey, DeviceName, dan DeviceSecret) ke setiap perangkat.
Sertifikat-unik-per-produk: Membakar sertifikat yang sama (ProductKey dan ProductSecret) ke semua perangkat dari suatu produk. Metode ini memerlukan lebih sedikit modifikasi pada jalur produksi. Setiap perangkat harus memiliki pengenal uniknya sendiri dan mengunggahnya terlebih dahulu ke Alibaba Cloud IoT Platform. Platform akan menentukan apakah dapat menerima koneksi dari perangkat berdasarkan pengenal tersebut.
Gunakan IOT_Ioctl() untuk mengonfigurasi metode autentikasi:
/* Pilih Metode Login */
int dynamic_register = 1; /* 0: Jangan gunakan sertifikat-unik-per-produk, 1: gunakan sertifikat-unik-per-produk */
IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);Implementasi autentikasi sertifikat-unik-per-perangkat
Anda perlu memanggil IOT_Ioctl untuk menetapkan mode autentikasi:
// hanya untuk demo
/* Tetapkan mode autentikasi */
int dynamic_register = 0;
IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);Implementasi autentikasi sertifikat-unik-per-produk
Sertifikat-unik-per-produk berarti konten (ProductKey dan ProductSecret) yang dibakar ke perangkat dari suatu produk adalah sama. Proses ini menggunakan pendaftaran-dinamis untuk mendapatkan DeviceSecret dari platform IoT dengan menggunakan pengenal unik perangkat. Pengenal unik perangkat bisa berupa SN, alamat MAC, atau pengenal lainnya yang akan diperlakukan sebagai DeviceName.
Setelah SDK mendapatkan DeviceSecret perangkat dari platform IoT, ia akan memanggil HAL_SetDeviceSecret() untuk menyimpan DeviceSecret. Perangkat harus menyimpan nilai ini di Flash. DeviceSecret tidak boleh dihapus setelah perangkat mendapatkannya melalui proses pendaftaran-dinamis karena platform IoT akan menolak memberikan DeviceSecret jika perangkat sudah mendapatkan DeviceSecret-nya.
Untuk menggunakan sertifikat-unik-per-produk, cukup panggil antarmuka berikut untuk mengaktifkan fungsi pendaftaran dinamis:
/* Aktifkan fungsi pendaftaran dinamis */
int dynamic_register = 1; /* 1: Gunakan sertifikat-unik-per-produk */
IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);Contoh Autentikasi Sertifikat-Unik-Per-Produk untuk Produk Edisi-Dasar
Kunjungi Alibaba Cloud IoT Platform, pilih produk, dan aktifkan "Pendaftaran-Dinamis":

Buat perangkat baru di bawah produk ini:

Buka Link Kit SDK dan ubah kode seperti berikut:
#include "iot_import.h"
#include "iot_export.h"
#include "app_entry.h"
// Ganti nilai PRODUCT_KEY, PRODUCT_SECRET, DEVICE_NAME
#define PRODUCT_KEY "a1MZxOdcBnO"
#define PRODUCT_SECRET "h4I4dneEFp7EImTv"
#define DEVICE_NAME "Example_dyn1"
//Dan komentar DEVICE_SECRET
//#define DEVICE_SECRET "t9GmMf2jb3LgWfXBaZD2r3aJrfVWBv56"
...
...
int main(int argc, char **argv)
{
IOT_OpenLog("mqtt");
IOT_SetLogLevel(IOT_LOG_DEBUG);
user_argc = argc;
user_argv = argv;
HAL_SetProductKey(PRODUCT_KEY);
HAL_SetProductSecret(PRODUCT_SECRET);
HAL_SetDeviceName(DEVICE_NAME);
// Komentar pengaturan ke DeviceSecret, karena kita akan mendapatkannya dari platform IoT secara dinamis
/* HAL_SetDeviceSecret(DEVICE_SECRET); */
/* Pilih Server Login */
int domain_type = IOTX_CLOUD_DOMAIN_SH;
IOT_Ioctl(IOTX_IOCTL_SET_DOMAIN, (void *)&domain_type);
/* Aktifkan Pendaftaran Dinamis */
int dynamic_register = 1;
IOT_Ioctl(IOTX_IOCTL_SET_DYNAMIC_REGISTER, (void *)&dynamic_register);
mqtt_client();
IOT_DumpMemoryStats(IOT_LOG_DEBUG);
IOT_CloseLog();
EXAMPLE_TRACE("keluar dari contoh!") ;
return 0;
}Setelah Anda mengompilasi kode, jalankan program sampel. Keluarannya akan tampak seperti berikut:
$./output/release/bin/mqtt-example
[inf] IOT_SetupConnInfo(114): DeviceSecret KV tidak ada, Sekarang Kita Perlu Pendaftaran Dinamis...
[inf] _calc_dynreg_sign(61): Kunci Acak: 7y4Jg5xdKCy9W2i
[inf] _calc_dynreg_sign(75): Tanda tangan: d3b560d5be0c9c19749470e85d912b65685fa4b20edcbd179ccfe98fcca23d5e
[inf] httpclient_common(794): host: 'iot-auth.cn-shanghai.aliyuncs.com', port: 443
...
...
...
[inf] _fetch_dynreg_http_resp(110): Payload Respon Http: {"code":200,"data":{"deviceName":"Example_dyn1","deviceSecret":"KGQQFFlGinIipW9Xn7xQ5U6d6MokPZD4","productKey":"a1ExpAkj9Hi"},"message":"success"}
[inf] _fetch_dynreg_http_resp(127): Kode Pendaftaran Dinamis: 200
[inf] _fetch_dynreg_http_resp(148): Rahasia Perangkat Pendaftaran Dinamis: KGQQFFlGinIipW9Xn7xQ5U6d6MokPZD4
[inf] iotx_device_info_init(39): device_info berhasil dibuat!
...
[dbg] iotx_device_info_set(49): mulai menetapkan info perangkat!
[dbg] iotx_device_info_set(63): device_info berhasil ditetapkan!
[inf] guider_print_dev_guider_info(279): ....................................................
[inf] guider_print_dev_guider_info(280): ProductKey : a1ExpAkj9Hi
[inf] guider_print_dev_guider_info(281): DeviceName : Example_dyn1
[inf] guider_print_dev_guider_info(282): DeviceID : a1ExpAkj9Hi.Example_dyn1
[inf] guider_print_dev_guider_info(284): ....................................................
[inf] guider_print_dev_guider_info(285): PartnerID Buf : ,partner_id=example.demo.partner-id
[inf] guider_print_dev_guider_info(286): ModuleID Buf : ,module_id=example.demo.module-id
[inf] guider_print_dev_guider_info(287): Guider URL :
[inf] guider_print_dev_guider_info(289): Guider SecMode : 2 (TLS + Direct)
[inf] guider_print_dev_guider_info(291): Guider Timestamp : 2524608000000
[inf] guider_print_dev_guider_info(292): ....................................................
[inf] guider_print_dev_guider_info(298): ....................................................
[inf] guider_print_conn_info(256): -----------------------------------------
...
...
[inf] iotx_mc_connect(2502): koneksi mqtt berhasil!Keluaran eksekusi sebelumnya menunjukkan bahwa perangkat telah berhasil memperoleh DeviceSecret melalui pendaftaran-dinamis.
(Rahasia Perangkat): "KGQQFFlGinIipW9Xn7xQ5U6d6MokPZD4"SDK secara otomatis memanggil HAL_Kv_Set untuk membuatnya persisten, dan SDK akan mengambilnya dari Flash ketika perangkat terhubung kembali ke IoT Platform. Jika pengguna mencoba menggunakan fungsi sertifikat-unik-per-produk pada perangkat yang sama untuk kedua kalinya, cloud akan mengembalikan kesalahan berikut:
[inf] _fetch_dynreg_http_resp(110): Payload Respon Http: {"code":6289,"message":"perangkat sudah aktif"}Dukungan untuk Alibaba Cloud Link Platform untuk Smart Living
Ketika jaringan diaktifkan untuk perangkat luar negeri di Alibaba Cloud Link Platform for Smart Living, mereka akan terhubung secara seragam ke pusat aktivasi di Singapura. Platform akan secara otomatis menetapkan perangkat ke node data terdekat. Sebagai contoh, perangkat yang diaktifkan di Amerika Serikat akan secara otomatis terhubung ke server di Amerika Serikat.
SDK dapat mendukung mode Alibaba Cloud Link Platform for Smart Living dengan melakukan dua konfigurasi berikut:
- Ganti
FEATURE_MQTT_DIRECTdarimake.settingmenjadin, yang mengaktifkan mode autentikasi https. - Konfigurasikan situs Singapura sebagai situs koneksi:
/* Pilih Server Login */
int domain_type = IOTX_CLOUD_REGION_SINGAPORE;
IOT_Ioctl(IOTX_IOCTL_SET_REGION, (void *)&domain_type);