本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用自訂驗證連線到 AWS IoT Core
設備可以通 AWS IoT Core 過使用自定義身份驗證與任何 AWS IoT Core 支持設備消息傳遞的協議進行連接。如需受支援通訊協定的詳細資訊,請參閱 裝置通訊協定。 傳遞至授權方 Lambda 函數的連線資料取決於您使用的通訊協定。如需建立授權方 Lambda 函數的詳細資訊,請參閱 定義您的 Lambda 函數。以下各節說明如何使用每個支援的通訊協定來連線,以便進行身分驗證。
HTTPS
使用 HTTPPublish 傳送資料至 AWS IoT Core 的裝置API可以透過要求標頭或要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連線連線的裝置可以透過MQTT訊息的username
和password
欄位傳遞認證。 AWS IoT Core 此 username
值也可以選擇包含一個查詢字串,將其他值 (包括字符、簽章和授權方名稱) 傳遞給您的授權方。如果您想要使用字符型身分驗證結構描述,而不是 username
和 password
值,則可使用此查詢字串。
注意
密碼欄位中的資料是由基 64 編碼。 AWS IoT Core您的 Lambda 函數必須將其解碼。
以下範例包含一個 username
字串,其中包含指定字符和簽章的額外參數。
username?x-amz-customauthorizer-name=
authorizer-name
&x-amz-customauthorizer-signature=token-signature
&token-key-name
=token-value
若要叫用授權者,使用MQTT和自訂驗證連線至 AWS IoT Core 的裝置必須在連接埠 443 上連線。它們也必須傳遞值為的應用程式層通訊協定交涉 (ALPN) TLS 延伸模組,mqtt
且其 AWS IoT Core 資料端點的主機名稱為「伺服器名稱指示」(SNI) 延伸模組。為了避免潛在的錯誤,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 over 連線的裝置 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 雜湊演算法對簽章進行編碼。