翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタム認証 AWS IoT Core を使用した への接続
デバイスは、 AWS IoT Core がデバイスメッセージング用に AWS IoT Core サポートする任意のプロトコルでカスタム認証を使用して に接続できます。サポートされる通信プロトコルの詳細については、デバイス通信プロトコル を参照してください。 オーソライザーの Lambda 関数に渡す接続データは、使用するプロトコルによって異なります。オーソライザーの Lambda 関数の作成の詳細については、「Lambda 関数の定義」を参照してください。次のセクションでは、サポートされている各プロトコルを使用して接続して認証する方法について説明します。
HTTPS
HTTP Publish 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
接続 AWS IoT Core を使用して に接続するデバイスは、MQTTメッセージの username
および password
フィールドを通じて認証情報を渡すMQTTことができます。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
オーソライザーを呼び出すには、 MQTTとカスタム認証 AWS IoT Core を使用して に接続するデバイスがポート 443 に接続する必要があります。また、 の値を持つ Application Layer Protocol Negotiation (ALPN) TLS拡張機能mqtt
と、 AWS IoT Core データエンドポイントのホスト名を持つ Server Name Indication (SNI) 拡張機能を渡す必要があります。潜在的なエラーを回避するには、 の値をURLエンコードx-amz-customauthorizer-signature
する必要があります。また、 x-amz-customauthorizer-name
と の値をtoken-key-name
URLエンコードすることを強くお勧めします。これらの値の詳細については、「デバイス通信プロトコル」を参照してください。V2 AWS IoT Device SDK、Mobile SDK、および AWS IoT Device Client は、これらの拡張の両方を設定できます。
MQTT 経由 WebSockets
AWS IoT Core MQTT を使用して に接続するデバイスは、次の 2 つの方法のいずれかで認証情報を渡す WebSockets ことができます。
-
WebSockets 接続を確立するリクエストのHTTPUPGRADEリクエストヘッダーまたはクエリパラメータを介して。
-
メッセージ内の フィールド
username
とpassword
フィールドを使用しますMQTTCONNECT。
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 ハッシュアルゴリズムを使用して署名をエンコードします。