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 ke AWS IoT Core dengan menggunakan otentikasi khusus dengan protokol apa pun yang AWS IoT Core mendukung untuk pesan perangkat. Untuk informasi selengkapnya tentang protokol komunikasi yang didukung, lihat. Protokol komunikasi perangkat  Data koneksi yang Anda berikan ke fungsi Lambda otorisasi Anda tergantung pada protokol yang Anda gunakan. Untuk informasi selengkapnya tentang membuat fungsi Lambda otorisasi Anda, lihat. Mendefinisikan fungsi Lambda Anda Bagian berikut menjelaskan cara menghubungkan untuk mengautentikasi dengan menggunakan setiap protokol yang didukung.

HTTPS

Perangkat mengirim data ke AWS IoT Core dengan menggunakan HTTPPublish API dapat meneruskan kredensyal baik melalui header permintaan atau parameter kueri dalam permintaan mereka. HTTP POST Perangkat dapat menentukan otorisasi untuk dipanggil dengan menggunakan x-amz-customauthorizer-name header atau parameter kueri. Jika Anda mengaktifkan penandatanganan token di otorisasi, Anda harus meneruskan token-key-name dan x-amz-customauthorizer-signature dalam header permintaan atau parameter kueri. Perhatikan bahwa token-signature nilai harus URL -dikodekan saat menggunakan JavaScript dari dalam browser.

catatan

Authorizer pelanggan untuk HTTPS protokol hanya mendukung operasi publikasi. Untuk informasi lebih lanjut tentang HTTPS protokol, 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 ke AWS IoT Core dengan menggunakan MQTT koneksi dapat meneruskan kredensil melalui username dan password bidang pesan. MQTT usernameNilai 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, bukan dan nilai. username password 

catatan

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

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 otorisasi, perangkat terhubung ke AWS IoT Core dengan menggunakan MQTT dan otentikasi khusus harus terhubung pada port 443. Mereka juga harus melewati TLS ekstensi Application Layer Protocol Negotiation (ALPN) dengan nilai mqtt dan ekstensi Server Name Indication (SNI) dengan nama host mereka AWS IoT Core titik akhir data. Untuk menghindari potensi kesalahan, nilai untuk x-amz-customauthorizer-signature harus URL dikodekan. Kami juga sangat merekomendasikan bahwa nilai-nilai x-amz-customauthorizer-name dan token-key-name URL 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. 

MQTTlebih WebSockets

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

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

  • Melalui username dan password bidang dalam MQTT CONNECT pesan.

Jika Anda meneruskan kredensil melalui pesan MQTT sambungkan, SNI TLS ekstensi ALPN dan diperlukan. Untuk informasi selengkapnya tentang ekstensi ini, lihatMQTT. Contoh berikut menunjukkan cara meneruskan kredensyal 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 public-private key pair yang Anda gunakan dalam panggilan. create-authorizer Contoh berikut menunjukkan cara membuat tanda tangan token dengan menggunakan perintah UNIX -like dan JavaScript. Mereka menggunakan algoritma hash SHA -256 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')