如何在 CoAP 请求中发送令牌?

How to send token in CoAP requests?

是否就如何将令牌作为 CoAP 请求的一部分发送达成共识?

HTTP 客户端通过 Authorization header(或最终 Cookie header) 或较少作为 URL 的一部分(例如 JSON Web Token 编码在 base64url 中)。在 CoAP RFC 中,没有与 Authorization 等效的选项。

用于受限环境(例如OSCORE or DTLS)的身份验证和授权的草案配置文件依赖于底层安全协议来维持状态连接并且令牌被上传到/authz-info一次:

      C                            RS                   AS
      | [-- Resource Request --->] |                     |
      |                            |                     |
      | [<---- AS Request  ------] |                     |
      |      Creation Hints        |                     |
      |                            |                     |
      | ----- POST /token  ----------------------------> |
      |                            |                     |
      | <---------------------------- Access Token ----- |
      |                           + Access Information   |
      | ---- POST /authz-info ---> |                     |
      |     (access_token, N1)     |                     |
      |                            |                     |
      | <--- 2.01 Created (N2) --- |                     |

但是,这不适用于未受保护的环境(例如用于开发或在专用网络中)。由于 CoAP 通常位于 UDP 之上,因此不可能有“会话”,因此我们无法跟踪哪个客户端上传了哪个令牌。我想避免讨论令牌在不受保护的上下文中的有用性。

令牌应该是 URI 的一部分(即作为 Uri-Query 选项还是在 Uri-Path 中)? ThingsBoard 是具有 Uri-Query 中的 token as part of the Uri-Path but I'm not sure if this is the best option. Also, would sending a binary CBOR Web Token 的服务示例,如果没有 base64url 编码是否可行?

在 CoAP 中,不会尝试在没有安全层的情况下提供用户身份验证,也不会在 CoAP 层中提供会话(这会违反 REST 设计)。

据我所知,这是一个有意识的决定,目的是引导实施者进行 RESTful 设计,并避免通过不安全的传输传输安全令牌。

对于"during development"的两个用例,可以在实验使用范围内引入自己的CoAP选项,例如“65003 = Simulated-OSCORE-Key-ID”(其中65003是选择为关键且不安全转发)。虽然 OSCORE 堆栈不可操作,但可以在其中插入一个临时制作的 OSCORE 密钥 ID,然后在 ACE 步骤中使用它发布一个令牌。显然,这些构造既不应该脱离测试设置,也不应该进入规范。

私有网络与 CoAP 中的其余网络一样被视为不受信任 ("NoSec mode")。在最小权限原则的上下文中可能会更好地理解该假设,这使得网络上的所有设备(和进程)共享同一组权限的设置极不可能。