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