本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
裝置可以透過 AWS IoT Core 使用自訂身分驗證搭配 AWS IoT Core 支援裝置傳訊的任何通訊協定來連線至 。如需受支援通訊協定的詳細資訊,請參閱 裝置通訊協定。 傳遞至授權方 Lambda 函數的連線資料取決於您使用的通訊協定。如需建立授權方 Lambda 函數的詳細資訊,請參閱 定義您的 Lambda 函數。以下各節說明如何使用每個支援的通訊協定來連線,以便進行身分驗證。
HTTPS
AWS IoT Core 使用 HTTP Publish API 將資料傳送到 的裝置,可以透過請求標頭或 HTTP POST 請求中的查詢參數來傳遞憑證。裝置可以指定要使用 x-amz-customauthorizer-name
標頭或查詢參數叫用的授權方。如果您已在授權方中啟用字符簽署,則必須在請求標頭或查詢參數中傳遞
和 token-key-name
x-amz-customauthorizer-signature
。請注意,在瀏覽器中使用 JavaScript 時,
的值必須是 URL 編碼格式。token-signature
注意
HTTPS 通訊協定的客戶授權方僅支援發佈操作。如需有關 HTTP 通訊協定的詳細資訊,請參閱 裝置通訊協定。
下列範例請求會顯示如何在請求標頭和查詢參數中傳遞這些參數。
//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
AWS IoT Core 使用 MQTT 連線連線至 的裝置可以透過 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
,以及具有其 AWS IoT Core 資料端點主機名稱的伺服器名稱指示 (SNI) 延伸。為了避免潛在的錯誤,x-amz-customauthorizer-signature
的值必須進行 URL 編碼。我們也強烈建議您對 x-amz-customauthorizer-name
和 token-key-name
值進行 URL 編碼。如需這些值的詳細資訊,請參閱 裝置通訊協定。V2 AWS IoT 裝置 SDK、行動 SDK 和 AWS IoT 裝置用戶端 可以設定這些延伸模組。
MQTT over WebSockets
AWS IoT Core 透過 WebSockets 使用 MQTT 連線至 的裝置,可以透過下列兩種方式之一傳遞登入資料。
-
透過 HTTP UPGRADE 請求中的請求標頭或查詢參數來建立 WebSockets 連線。
-
透過 MQTT CONNECT 訊息中的
username
和password
欄位。
如果透過 MQTT CONNECT 訊息傳遞憑證,則需要 ALPN 和 SNI TLS 延伸。如需這些延伸的詳細資訊,請參閱 MQTT。下列範例顯示如何透過 HTTP Upgrade 請求傳遞憑證。
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 雜湊演算法來編碼簽章。
echo -n
TOKEN_VALUE
| openssl dgst -sha256 -signPEM encoded RSA private key
| openssl base64