翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタム認証 AWS IoT Core を使用した への接続
デバイスは、 AWS IoT Core がデバイスメッセージング用に AWS IoT Core サポートする任意のプロトコルでカスタム認証を使用して に接続できます。サポートされる通信プロトコルの詳細については、デバイス通信プロトコル を参照してください。 オーソライザーの Lambda 関数に渡す接続データは、使用するプロトコルによって異なります。オーソライザーの Lambda 関数の作成の詳細については、「Defining your Lambda function」を参照してください。次のセクションでは、サポートされている各プロトコルを使用して接続して認証する方法について説明します。
HTTPS
HTTP Publish API を使用して AWS IoT Core にデータを送信するデバイスは、HTTP POST リクエストのリクエストヘッダーまたはクエリパラメータを介して認証情報を渡すことができます。デバイスは、x-amz-customauthorizer-name ヘッダーまたはクエリパラメータを使用して呼び出すオーソライザーを指定できます。オーソライザーでトークン署名を有効にしている場合は、リクエストヘッダーまたはクエリパラメータで と token-key-namex-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-signaturetoken-key-name:token-valuex-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-valueHTTP/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 SDKs、Mobile SDKs、および 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-signaturetoken-key-name:token-valuesec-WebSocket-Key:any random base64 valuesec-websocket-protocol: mqtt sec-WebSocket-Version:websocket version
トークンへの署名
create-authorizer 呼び出しで使用したパブリックキーとプライベートキーのペアのプライベートキーを使用してトークンに署名する必要があります。次の例では、Unix 系のコマンドと JavaScript を使用してトークン署名を作成する方法を示します。SHA-256 ハッシュアルゴリズムを使用して、署名をエンコードします。