产品定价 立即试用
专业版
文档 > 安全 > CoAP传输 > 基于访问令牌的认证
入门
指南 安装 架构 API 常见问题
目录

CoAP 的 Access Token 认证

Access Token认证是默认的设备认证方式。设备在ThingsBoard中创建后,会生成默认的access token。之后可修改。 若要通过Access Token认证将设备连接到服务器,客户端必须在CoAP请求URL中指定access token。 详见 CoAP API

CoAP在DTLS上的Access Token认证是一种标准认证模式,客户端设备通过服务器证书验证服务器身份。 要为DTLS启用CoAP Access Token认证,服务器证书链需由受信任CA签发,或客户端需将自签名服务器证书(.cer或 .pem)导入其trust store。 否则连接会因 “Unknown CA” 错误而失败。

以下coap-client示例演示如何连接到 ThingsBoard Cloud 或任何具有有效且受信任证书的ThingsBoard CoAP服务器。

使用access token连接DTLS CoAP客户端

Plain CoAP(无TLS)

下面是一条使用Access Token YOUR_ACCESS_TOKEN 向ThingsBoard实例 YOUR_TB_HOST 上传温度读数的简单命令。 详见 CoAP API。该命令使用不带TLS的Plain CoAP:

1
coap-client -v 6 -m POST coap://YOUR_TB_HOST:5683/api/v1/YOUR_ACCESS_TOKEN/telemetry -t json -e "{temperature:25}"

上述命令需要coap-client库,可通过以下命令安装:

  • Ubuntu 20.04: sudo apt install libcoap2-bin
  • Ubuntu 18.04: sudo apt install libcoap1-bin

别忘了将 YOUR_TB_HOST 替换为您的ThingsBoard实例主机,YOUR_ACCESS_TOKEN 替换为设备的access token。

DTLS支持(单向TLS)

CoAP在DTLS上的access token认证是一种标准模式,客户端设备通过服务器证书验证服务器身份。

注意:“单向TLS”是指客户端验证服务器,但服务器不验证客户端。

CoAP客户端连接服务器时,通过验证证书是否过期、是否受客户端信任来确认服务器身份。 在以下情况下证书被视为受信任:

  • 由知名证书颁发机构(CA)签发,如 Let’s Encrypt
  • 存在于客户端的trust store中。

要建立信任,CoAP客户端必须提供用于签署服务器证书的CA证书。与某些依赖系统trust store的HTTPS实现不同,使用DTLS的CoAP客户端需要显式配置CA证书。

若未提供CA证书,连接可能仍会成功,但证书验证会被禁用, 即客户端会接受服务器提供的任何证书而不校验其真实性。

1
2
3
127.0.0.1:35046 <-> 127.0.0.1:5684 DTLS: unable to get local issuer certificate: overridden: 'localhost' depth=0
127.0.0.1:35046 <-> 127.0.0.1:5684 DTLS: unable to get certificate CRL: overridden: 'localhost' depth=0
127.0.0.1:35046 <-> 127.0.0.1:5684 DTLS: unable to verify the first certificate: overridden: 'localhost' depth=0

尽管有这些警告,握手仍会成功完成:

1
127.0.0.1:35046 <-> 127.0.0.1:5684 DTLS: Using cipher: ECDHE-ECDSA-AES256-GCM-SHA384

这会使连接暴露于中间人(MITM)攻击,生产环境中应避免。 为提高安全性,请考虑使用 Two-Way DTLS, 实现客户端与服务器互相验证证书。

在使用示例之前,需先安装支持DTLS的CoAP客户端。

安装支持DTLS的CoAP客户端

按以下步骤在Linux上安装支持DTLS的CoAP客户端:

  • 步骤 1:克隆libcoap的git仓库:
1
git clone https://github.com/obgm/libcoap --recursive --depth 1
  • 步骤 2:进入libcoap目录:
1
cd libcoap
  • 步骤 3:执行以下命令,然后运行 ./autogen.sh 脚本:
1
sudo apt-get update
1
sudo apt-get install autoconf libtool libssl-dev
1
./autogen.sh
  • 步骤 4:使用以下选项运行 ./configure 脚本:
1
./configure --with-openssl --disable-doxygen --disable-manpages --disable-shared
  • 步骤 5:执行以下命令:
1
make
  • 步骤 6:执行以下命令:
1
sudo make install

示例:

由于CoAP客户端必须始终提供CA证书以进行验证, 请使用 -R 标志,后跟包含受信任根CA证书的PEM文件路径。

若您托管自己的ThingsBoard实例,请参阅 CoAP over DTLS 指南以配置服务器证书。

配置完成后,需准备pem格式的CA根证书。该证书将供CoAP客户端验证服务器证书。 将CA根证书保存到工作目录,命名为 “ca-root.pem“。

现在可使用 “ca.pem” 建立与ThingsBoard实例 YOUR_TB_HOST 的安全连接,并使用Access Token YOUR_ACCESS_TOKEN 认证设备以上传遥测数据:

1
coap-client-openssl -v 6 -m POST  -R ca-root.pem -t "application/json" -e '{"temperature":42}' coaps://YOUR_TB_HOST/api/v1/YOUR_ACCESS_TOKEN/telemetry

别忘了将 YOUR_TB_HOST 替换为您的ThingsBoard实例主机,YOUR_ACCESS_TOKEN 替换为设备的access token。