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