View a markdown version of this page

Menghubungkan ke AWS IoT Core dengan menggunakan otentikasi kustom - AWS IoT Core

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menghubungkan ke AWS IoT Core dengan menggunakan otentikasi kustom

Perangkat dapat terhubung AWS IoT Core dengan menggunakan otentikasi khusus dengan protokol apa pun yang AWS IoT Core mendukung pengiriman pesan perangkat. Untuk informasi selengkapnya tentang protokol komunikasi yang didukung, lihatProtokol komunikasi perangkat.  Data koneksi yang Anda berikan ke fungsi Lambda otorizer tergantung pada protokol yang Anda gunakan. Untuk informasi selengkapnya tentang membuat fungsi Lambda otorizer Anda, lihat. Mendefinisikan fungsi Lambda Anda Bagian berikut menjelaskan cara menyambung untuk mengotentikasi dengan menggunakan setiap protokol yang didukung.

HTTPS

Perangkat yang mengirim data AWS IoT Core dengan menggunakan HTTP Publish API dapat meneruskan kredenSIAL baik melalui header permintaan atau parameter kueri dalam permintaan HTTP POST mereka. Perangkat dapat menentukan otorizer untuk dipanggil dengan menggunakan parameter x-amz-customauthorizer-name header atau query. Jika penandatanganan token diaktifkan di otorizer, Anda harus meneruskan token-key-name dan x-amz-customauthorizer-signature di header permintaan atau parameter kueri. Perhatikan bahwa token-signature nilainya harus URL-encoded saat menggunakan JavaScript dari dalam browser.

catatan

Otorisasi pelanggan untuk protokol HTTPS hanya mendukung operasi publikasi. Untuk informasi selengkapnya tentang protokol HTTPS, lihatProtokol komunikasi perangkat.

Contoh permintaan berikut menunjukkan bagaimana Anda meneruskan parameter ini di header permintaan dan parameter kueri.

//Passing credentials via headers POST /topics/topic?qos=qos HTTP/1.1 Host: your-endpoint  x-amz-customauthorizer-signature: token-signature token-key-name: token-value  x-amz-customauthorizer-name: authorizer-name //Passing credentials via query parameters POST /topics/topic?qos=qos&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value HTTP/1.1

MQTT

Perangkat yang terhubung AWS IoT Core dengan menggunakan koneksi MQTT dapat meneruskan kredenSIAL melalui password bidang username dan pesan MQTT. Nilai username tersebut juga dapat secara opsional berisi string kueri yang meneruskan nilai tambahan (termasuk token, tanda tangan, dan nama otorisasi) ke otorisasi Anda. Anda dapat menggunakan string kueri ini jika Anda ingin menggunakan skema otentikasi berbasis token alih-alih password nilai username dan. 

catatan

Data di bidang kata sandi dikodekan base64 oleh. AWS IoT Core Fungsi Lambda Anda harus memecahkan kodenya.

Contoh berikut berisi username string yang berisi parameter tambahan yang menentukan token dan tanda tangan. 

username?x-amz-customauthorizer-name=authorizer-name&x-amz-customauthorizer-signature=token-signature&token-key-name=token-value

Untuk memanggil otorizer, perangkat yang terhubung AWS IoT Core dengan menggunakan MQTT dan otentikasi khusus harus terhubung pada port 443. Mereka juga harus melewati ekstensi TLS Application Layer Protocol Negotiation (ALPN) dengan nilai mqtt dan ekstensi Server Name Indication (SNI) dengan nama host titik akhir data mereka AWS IoT Core . Untuk menghindari potensi kesalahan, nilai untuk x-amz-customauthorizer-signature harus dikodekan URL. Kami juga sangat menyarankan agar nilai-nilai x-amz-customauthorizer-name dan URL token-key-name dikodekan. Untuk informasi lebih lanjut tentang nilai-nilai ini, lihatProtokol komunikasi perangkat. V2 AWS IoT SDK Perangkat, SDK Seluler, dan AWS IoT Klien Perangkat dapat mengkonfigurasi kedua ekstensi ini. 

MQTT over WebSockets

Perangkat yang terhubung AWS IoT Core dengan menggunakan MQTT over WebSockets dapat meneruskan kredenSIAL dengan salah satu dari dua cara berikut.

  • Melalui header permintaan atau parameter kueri dalam permintaan UPGRADE HTTP untuk membuat WebSockets koneksi.

  • Melalui password bidang username dan dalam pesan MQTT CONNECT.

Jika Anda meneruskan kredenSIAL melalui pesan koneksi MQTT, ekstensi TLS ALPN dan SNI diperlukan. Untuk informasi selengkapnya tentang ekstensi ini, lihatMQTT. Contoh berikut menunjukkan cara meneruskan kredenSIAL melalui permintaan Upgrade HTTP.

GET /mqtt HTTP/1.1 Host: your-endpoint Upgrade: WebSocket Connection: Upgrade x-amz-customauthorizer-signature: token-signature token-key-name: token-value  sec-WebSocket-Key: any random base64 value sec-websocket-protocol: mqtt sec-WebSocket-Version: websocket version

Menandatangani token

Anda harus menandatangani token dengan kunci pribadi dari pasangan kunci publik-pribadi yang Anda gunakan dalam panggilan. create-authorizer Contoh berikut menunjukkan cara membuat tanda tangan token dengan menggunakan UNIX-like perintah dan JavaScript. Mereka menggunakan algoritma SHA-256 hash untuk menyandikan tanda tangan.

Command line
echo -n TOKEN_VALUE | openssl dgst -sha256 -sign PEM encoded RSA private key | openssl base64
JavaScript
const crypto = require('crypto') const key = "PEM encoded RSA private key" const k = crypto.createPrivateKey(key) let sign = crypto.createSign('SHA256') sign.write(t) sign.end() const s = sign.sign(k, 'base64')