本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
AWS IoT Core 使用自訂身分驗證連線至
裝置可以透過 AWS IoT Core 將自訂身分驗證與 AWS IoT Core 支援裝置傳訊的任何通訊協定搭配使用來連線至 。如需受支援通訊協定的詳細資訊,請參閱 裝置通訊協定。 傳遞至授權方 Lambda 函數的連線資料取決於您使用的通訊協定。如需建立授權方 Lambda 函數的詳細資訊,請參閱 定義您的 Lambda 函數。以下各節說明如何使用每個支援的通訊協定來連線,以便進行身分驗證。
HTTPS
使用HTTP發佈API AWS IoT Core 將資料傳送至 的裝置,可以透過請求標頭或HTTPPOST查詢請求中的參數傳遞憑證。裝置可以指定要使用 x-amz-customauthorizer-name
標頭或查詢參數叫用的授權方。如果您已在授權方中啟用字符簽署,則必須在請求標頭或查詢參數中傳遞
和 token-key-name
x-amz-customauthorizer-signature
。請注意,在瀏覽器中使用 JavaScript 時,該
值必須 URL- 編碼。token-signature
注意
HTTPS 通訊協定的客戶授權方僅支援發佈操作。如需HTTPS通訊協定的詳細資訊,請參閱 裝置通訊協定。
下列範例請求會顯示如何在請求標頭和查詢參數中傳遞這些參數。
//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
使用 MQTT 連線 AWS IoT Core 連線至 的裝置可以透過 MQTT 訊息的 username
和 password
欄位傳遞憑證。此 username
值也可以選擇包含一個查詢字串,將其他值 (包括字符、簽章和授權方名稱) 傳遞給您的授權方。如果您想要使用字符型身分驗證結構描述,而不是 username
和 password
值,則可使用此查詢字串。
注意
密碼欄位中的資料由 編碼 base64 AWS IoT Core。您的 Lambda 函數必須將其解碼。
以下範例包含一個 username
字串,其中包含指定字符和簽章的額外參數。
username?x-amz-customauthorizer-name=
authorizer-name
&x-amz-customauthorizer-signature=token-signature
&token-key-name
=token-value
若要叫用授權方, AWS IoT Core 使用 MQTT和 自訂身分驗證連線至 的裝置必須在連接埠 443 上連線。他們還必須傳遞值為 的應用程式層通訊協定交涉 (ALPN) TLS擴充功能,mqtt
而伺服器名稱指示 (SNI) 擴充功能必須傳遞其 AWS IoT Core 資料端點的主機名稱。為了避免潛在的錯誤, x-amz-customauthorizer-signature
的值應URL進行編碼。我們也強烈建議token-key-name
對 x-amz-customauthorizer-name
和 URL 的值進行編碼。如需這些值的詳細資訊,請參閱 裝置通訊協定。V2 AWS IoT 裝置 SDK、行動 SDK 和 AWS IoT 裝置用戶端 可以設定這些延伸模組。
MQTT 超過 WebSockets
AWS IoT Core 使用 MQTT 越過 連線至 的裝置 WebSockets ,可以透過下列兩種方式之一傳遞憑證。
-
透過請求中的HTTPUPGRADE請求標頭或查詢參數來建立 WebSockets 連線。
-
透過MQTTCONNECT訊息中的
username
和password
欄位。
如果您透過MQTT連線訊息傳遞憑證,則需要 ALPN和 SNITLS擴充功能。如需這些擴充功能的詳細資訊,請參閱 MQTT。下列範例示範如何透過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
簽署字符
您必須利用您在 create-authorizer
呼叫中所使用之公有/私有金鑰對中的私有金鑰簽署字符。下列範例示範如何使用UNIX類似 的命令和 來建立權杖簽章 JavaScript。他們使用 SHA-256 雜湊演算法來編碼簽章。