本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用自定义身份验证连接到 Amazon IoT Core
设备可以借助任何 Amazon IoT Core 支持进行设备消息收发的协议,使用自定义身份验证连接到 Amazon IoT Core。有关受支持的通信协议的更多信息,请参阅 设备通信协议。 您传递给授权方 Lambda 函数的连接数据取决于您使用的协议。有关创建授权方 Lambda 函数的更多信息,请参阅 定义您的 Lambda 函数。以下部分说明如何使用每个支持的协议连接到身份验证。
HTTPS
使用 HTTP Publish API 将数据发送给 Amazon IoT Core 的设备可以通过请求标头或 HTTP POST 请求中的查询参数传递凭证。设备可以使用 x-amz-customauthorizer-name
标头或查询参数指定要调用的授权方。如果您在授权方中启用了令牌签名,则必须使用请求标头或查询参数传递
和 token-key-name
x-amz-customauthorizer-signature
。请注意,在浏览器中使用 JavaScript 时,该
值必须为 URL 编码值。token-signature
以下示例请求显示了如何使用请求标头和查询参数传递这些参数。
//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 连接连接到 Amazon IoT Core 的设备可以通过 MQTT 消息中的 username
和 password
字段传递凭证。username
值也可以选择将其他值(包括令牌、签名和授权方名称)传递给授权方的查询字符串包含在内。如果要使用基于令牌的身份验证方案而不是 username
和 password
值,则可以使用此查询字符串。
注意
密码字段中的数据由 Amazon IoT Core 进行 base64 编码。您的 Lambda 函数必须对其进行解码。
以下示例包含一个 username
字符串,其中带有指定令牌和签名的额外参数。
username?x-amz-customauthorizer-name=
authorizer-name
&x-amz-customauthorizer-signature=token-signature
&token-key-name
=token-value
为了调用授权方,使用 MQTT 连接到 Amazon IoT Core 的设备和自定义身份验证必须连接端口 443。它们还必须传递带有值 mqtt
的应用程序层协议协商 (ALPN) TLS 扩展和带有其 Amazon IoT Core 数据终端节点的服务器名称指示 (SNI) 扩展。为避免潜在的错误,x-amz-customauthorizer-signature
的值应采用 URL 编码。我们还强烈建议 x-amz-customauthorizer-name
和 token-key-name
的值采用 URL 编码。有关这些值的更多信息,请参阅设备通信协议。V2 Amazon IoT Device SDK、Mobile SDK 和 Amazon IoT Device Client 可以配置这两个扩展。
MQTT 结束了 WebSockets
使用 MQTT 连接到Amazon IoT Core的设备 WebSockets 可以通过以下两种方式之一传递凭证。
通过 HTTP UPGRADE 请求中的请求标头或查询参数建立 WebSockets 连接。
通过
username
和password
字段中的 MQTT CONNECT 消息。
如果您通过 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 哈希算法对签名进行编码。