W3C

Web of Things (WoT) Architecture 1.1:
Implementation Report

Version: 23 Nov 2023

Editors:
Michael McCool (Intel)


Table of Contents

1. Introduction

The Web of Things (WoT) Architecture 1.1 document was published as a Candidate Recommendation Snapshot on 19 January 2023 and as a Proposed Recommendation on 11 July 2023.

This document summarizes the results from the Web of Things (WoT) Architecture 1.1 implementer reports received and describes the process that the Web of Things (WoT) Working Group followed in preparing this Implementation Report (IR).

1.1 Implementation Report objectives

1.2 Implementation Report non-objectives

Results were based on data files submitted by implementers stating whether or not their implementations conformed to the specification.

2. Work done during the Candidate Recommendation period

During the CR period, the Working Group performed the following activities:

  1. Clarification and improvement of the exposition of the specification
  2. Disposing of comments that were communicated to the WG during the CR period. These comments and their resolution are detailed in the GitHub Issue tracker.
  3. Gathering of additional test inputs and resolution of any at-risk assertions.
  4. Finalization of this Implementation Report.

3. Participating in the Implementation Report

Implementers were invited to contribute to the assessment of the Web of Things (WoT) Architecture 1.1 Candidate Recommendation by submitting implementer reports describing the coverage of their implementations with respect to the test assertions outlined in the table below.

Implementer reports were collected through the W3C WoT Interest Group's PlugFest activity and collected in the GitHub repository https://github.com/w3c/wot-testing under data/input_2022/Architecture.

Comments on this document, or requests made for further information were posted to the Working Group's public mailing list wot-wg@w3.org (archive) and as issues on the GitHub repository https://github.com/w3c/wot-architecture.

4. Entrance criteria for the Proposed Recommendation phase

The Web of Things (WoT) Working Group established the following entrance criteria for the Proposed Recommendation phase:

  1. Sufficient reports of implementation experience have been gathered to demonstrate interoperabilty.
  2. Specific Implementation Report requirements (outlined below) have been met.
  3. The Working Group has formally addressed and responded to all public comments received by the Working Group.

In order to be included in the PR all features, whether optional or required, need to have received at least two implementations. At the time of publication of this report all assertions have met this requirement.

5. Implementation Report requirements

5.1 Detailed requirements

  1. IR must cover all specified features in the specification. For each feature the IR should indicate:

Feature status is in practice indicated by RFC 2119 assertions associated with the feature. Features defined using any assertions containing the words MUST are considered required. Features defined using MAY and SHOULD assertions are considered optional.

Feature utility is indicated indirectly by the number of implementations supporting each feature. In general, features with fewer implementations will have a narrower scope, but may still be important for specific use cases.

5.2 Notes on testing

  1. An implementer report must indicate the outcome of evaluating the implementation with respect to each of the assertions defined in the specification. Possible outcomes are pass, fail, or not-impl (not implemented).
  2. In practice, implementer reports consist of CSV files for each implementation with the above status assigned to each assertion in the specification. This report was then automatically generated from these input files.

5.3 Out of scope

This implementation Report will not cover:

Although we did not formally test interoperability, we required two or more independent implementations for all features in the specification and tested general interoperability at plugfest events.

6. Systems

This section contains descriptions of each of the implementations of the WoT Architecture specification from all organizations that submitted implementer reports to at least one of the WoT specifications. Each implementation represents a working system that is based on the WoT Architecture. However, only the following submitted implementation reports for the WoT Architecture specification itself, and not all of these reported on all features:

For the purpose of establishing the implementability of the WoT Architecture specification, we only count systems with mostly independent code bases as distinct implementations. There are however some cases (documented in the following) where implementations shared components but were still considered substantially independent implementations. In cases where a substantial component was shared across implementations the features supported by that component were only counted once.

dart_wot: Consumer and Discoverer

The library dart_wot is a WoT Scripting API implementation written in the Dart programming language, aimed at bringing Web of Things support to the Dart/Flutter ecosystem.

It supports consuming and discovering TDs, providing protocol bindings for HTTP, CoAP, and MQTT. Its supported security mechanisms include DTLS (CoAP), TLS (HTTP, MQTT), Basic and Bearer authentication (HTTP), PSK (CoAP), and username/password authentication (MQTT). Furthermore, dart_wot's CoAP binding offers experimental support for ACE-OAuth (RFC 9200), an authorization and authentication framework for constrained environments.

Usage: dart_wot can be included in Dart and Flutter projects as a dependency. In Flutter apps, all platforms are supported, with macOS and iOS (where CoAPS support is limited) and Web browsers (where CoAP is not supported at all) as partial exceptions.

Public Repository: https://github.com/namib-project/dart_wot

pub.dev Entry: https://pub.dev/packages/dart_wot

Contributing Member Organizations: Invited Experts

Eclipse Ditto WoT Model: Tool

Eclipse Ditto offers a Java Module to use TDs and TMs inside Java environments with concepts native to Java, e.g. providing a builder API for creating new TM/TD instances and rendering those to JSON strings and vice versa.

Usage: Library

Public Repository: https://github.com/eclipse/ditto/tree/master/wot/model

Contributing Member Organizations: Bosch.IO

Eclipse Ditto: TD Exposer

A service that provides APIs for managing digital twins and interacting with the abstracted devices. Fetches linked Thing Models of digital twins and provides instance specific Thing Descriptions for them.

Usage: Service

Public Repository: https://github.com/eclipse/ditto

Website: https://www.eclipse.org/ditto/basic-wot-integration.html

Contributing Member Organizations: Bosch.IO

echonet-wot-proxy: Intermediary

This is an intermediary that connects ECHONET Lite devices into the W3C WoT and allows WoT clients to interact with them via provided TDs.

This intermediary extends the node-wot library.

Eclipse EdiTDor: Tool and Producer

The Eclipse EdiTDor implementation is a web application for simply designing W3C Thing Descriptions and Thing Models.

Usage: Web Application

Public Repository: https://github.com/eclipse/editdor Website: https://eclipse.github.io/editdor/

Contributing Member Organizations: Siemens AG, Bosch.IO

Fischertechnik Factory Simulator: Thing

This TM focused implementation is built upon the Fischertechnik Factory Simulator. The TMs are written by hand, together with the relationships. The TMs are then consumed by Eclipse Thingweb node-wot and is the reason why only TMs are submitted instead of TMs and the corresponding TDs.

Usage: To be consumed by tools like Eclipse Thingweb node-wot

Contributing Member Organizations:Siemens AG and TU Munich (not member)

fujitsu-ledbulb: TD Exposer

The Fujitsu ledbulb is a Wi-Fi controllable LED bulb that can be changed brightness and color. In addition, the light can be gradually turned off or turned on at a specified time.

fujitsu-proxy: Intermediary

Fujitsu's proxy creates a shadow of the device in the proxy, allowing consumers to control the actual device by accessing the shadow. Even if the actual device does not have an authentication mechanism, the proxy provides an authentication mechanism instead to enable secure access. Another advantage is that even if multiple devices have different protocol bindings, they can be accessed using one protocol. It also has a directory for discovering networked devices, creating their shadows, and registering them.

The proxy is implemented in Java.

This proxy is provided as a product in Japan. The product page is below (Japanese only). https://www.fujitsu.com/jp/products/network/carrier-router/wideareanetwork/virtuora-mx/

fujitsu-sensor: TD Exposer

The Fujitsu sensor is a sensor with temperature, humidity, and air pressure, and can be communicated through Wi-Fi to get data. This sensor was used to collect environmental data in agriculture and factories.

hitachi-esp-idf: Air quality sensor and acclerometer: TD Exposer

This is an example of a Thing implemented on a microcontroller. It can exporting the Thing's sensor reading via HTTP REST API, and advertise its own Thing Description using DNS-SD/mDNS.

hitachi-nodegen: Node generator for Node-RED: TD Consumer

Node generator is command line tool to generate Node-RED node modules from several various sources including Thing Description of Web of Things. Using this tool, node developers can dramatically reduce their time to implement Node-RED node modules.

hitachi-nodered: LED lamp: TD Exposer

This is an example of a Thing implemented in Node-RED. It can turn on and off a LED connected to Raspberry Pi's GPIOs and notify changes in LED status. It can also advertise its own Thing Description using DNS-SD/mDNS.

hitachi-nrwotdisc: WoT-Discovery Plugin for Node-RED: Discoverer

This plugin uses wot-discovery functionality and make it easy to import Things into Node-RED flow editor. The plugin discovers Things connected on the local area network or registered in the Thing Description Directory, and converts them into functional blocks that can be used in Node-RED.

intel-nodejs: TD Exposer

Two services based on a shared NodeJS codebase (not using node-wot):

Usage: Exposer

Contributing Member Organizations: Intel

intel-proxy: Intermediary

intel-proxy: Intermediary

This is a reverse proxy service that provides authentication (via various mechanisms indicated by the schemes indicated in the Thing Description) and encrypted transport (TLS) termination. The reverse proxy service was made accessible over a secure tunnel, and depending on the circumstances, can be run in the cloud, on a gateway computer, or locally on a device.

The secure endpoints provided by this service are not given in TDs for the service itself, but added to the TDs for the Things it services.

Usage: Intermediary

Contributing Member Organizations: Intel

intel-wot-ha: TD Directory and TD Exposer

A simple integration of WoT into Home Assistant. A service interrogates the metadata made available from Home Assistant on its external RESTful API. It then generates TDs for Home Assistant entities that can be accessed via this API and makes then available via a TD Directory service that follows the WoT Discovery specification. WoT Consumers can then access the TD Directory to find TDs for entities supported by Home Assistant and access these services using WoT affordance abstractions.

Usage: Directory and Exposer

Contributing Member Organizations: Intel

MQTT Experimental: Thing

The MQTT Experimental is an MQTT-based Thing implementation that aims to test different WoT operations together with the Data Schema variations that can exist in a TD. It is implemented in Python and can act as a way to verify interoperability between different MQTT Binding implementations.

Usage: Command line

Public Repository: https://github.com/egekorkan/wot-implementations/tree/master/mqtt-online

Contributing Member Organizations:Siemens AG

NHK: Emulated WoT Devices

WoT device emulator (Android App) Hybrid TV Emulator AndroidTV App

Eclipse node-wot: Consumer and Exposer

The Eclipse node-wot implementation is a Node.js-based framework for WoT Servients. It features an implementation of the WoT Scripting API to both consume TDs to instantiate Consumed Things and produce Exposed Things that provide a TD. The Eclipse node-wot implementation supports several Protocol Bindings including HTTP, CoAP, WebSockets, MQTT, Firestore, OPC-UA, Modbus, M-Bus and NETCONF with corresponding security mechanisms such as DTLS (CoAP); TLS (HTTP, MQTT), Basic, Digest, and Bearer Token authentication (HTTP), PSK (CoAP), and username/password authentication (MQTT).

Usage: It can be included in bigger projects as a dependency, used as a Command Line Interface or as a browser library.

Public Repository: https://github.com/eclipse/thingweb.node-wot

Contributing Member Organizations: Siemens AG, Invited Experts

philips-hue: Philips Hue Integration

This implementation leverages the already developed Philips Hue devices. The TDs for them are written by hand and show the use of WoT for brownfield devices. Philips Hue uses API Key in the URI, which is one of the features of the TD 1.1.

Usage: The TDs of the devices can be consumed and interacted with.

Public Repository: https://github.com/tum-esi/wot-sys/tree/master/Devices/PhilipsHUE

Contributing Member Organizations:Siemens AG and TU Munich (non-member)

Thing Description Playground: Tool

The Thing Description Playground implementation is a set of tools that allows one to validate TDs, as well to transform them into different representations such as OpenAPI and AsyncAPI or to manipulate TDs to add or remove default terms and values. It also allows to detect implemented assertions of the TD spec by looking at a TD, which is how the implementation report for the TD is generated.

Usage: It can be included in bigger projects as a dependency, used as a Command Line Interface or as a web application library.

Public Repository: https://github.com/thingweb/thingweb-playground Website: http://plugfest.thingweb.io/playground/

Contributing Member Organizations:Siemens AG

flask-tum: Custom Python Flask Things: Thing

Custom implementation pattern using the Flask library for creating an HTTP server that exposes a TD. This pattern is used in many devices that have been developed. It is not a framework like Eclipse Thingweb node-wot, more like a copy-paste driven implementation pattern.

Usage: Command line

Public Repository: All that start with "flask" at https://github.com/tum-esi/wot-sys/tree/master/Devices

Contributing Member Organizations:Siemens AG and TU Munich (non-member)

RIOT WoT Implementation: TD Exposer

WoT modules for RIOT, a real-time operating system for the Internet of Things.

The implementation provides data structures and serialization capabilities for generating and retrieving a RIOT device's TD using CoAP and DTLS (in PSK and RPK mode). The TD can be both discovered using /.well-known/wot and the CoRE Link Format (exposing the TD resource via /.well-known/core). Furthermore, the implementation includes a code generator that allows for translating an input Thing Model or Thing Description into C structures which will be used for serializing the device's TD.

At the time of writing, the implementation is not yet part of the RIOT upstream repository and only lives in a RIOT fork. However, the authors are working on integrating it into the RIOT upstream project.

Usage: RIOT-based applications can include the WoT modules via RIOT's Make-based build system.

Example applications (usable with ESP32s) can be found here: https://github.com/namib-project/wot-nodes

Contributing Member Organizations: Invited Experts

Siemens sayWoT!: Exposer and Consumer

sayWoT! is an industrial-grade implementation that allows integration of devices into Siemens software products like Asset Performance Suite, Desigo CC in a semantically-described and standardized way. sayWoT! is implemented in golang for optimal scalability and cross-architecture compatability.

Usage: Service in the cloud or on premise, Command Line Interface

Website: https://www.evosoft.com/en/digitalization-offering/saywot/

Contributing Member Organizations: Siemens AG

SDF-WoT-Converter: Tool

The SDF-WoT-Converter is a Python-based conversion tool between WoT data models (TDs and TMs) and the Semantic Definition Format (SDF), an IETF specification that strives to be a common data format for IoT device descriptions. The implementation provides a library API for using it in Python projects as well as a command-line interface after installing it via the Python package manager pip. Besides converting between WoT data models and SDF, the implementation also supports the conversion between TDs and TMs.

Usage: Library or Command Line

Public Repository: https://github.com/JKRhb/sdf-wot-converter-py

Python Package Index Entry: https://pypi.org/project/sdf-wot-converter/

Contributing Member Organizations: Invited Experts

SparTDD: Thing Description Directory

SparTDD is an implementation of the W3C Web of Things Thing Description Directory. There are two main components. The API of the TDD is written in Python using Flask. The data is stored in RDF in a Apache Jena Fuseki SPARQL endpoint. A demo can be found here.

Usage:Directory

Contributing Member Organizations:Siemens

tiny-iot: TinyIoT Thing Directory

This is an implementation of the W3C Web of Things (WoT) Thing Description Directory (TDD). This directory is designed to be lightweight and portable, enabling deployment on the edge. It uses a layered architecture to allows the addition of different storage backends to server high scalability needs.

The directory advertises itself in local networks using DNS-SD. It comes with the Things and Notification APIs, as well as JSONPath search support (non-normative). The directory performs fine-grained access control with the help of locally defined rules and an OpenID Connect server.

Usage: Directory

Public Repository: https://github.com/TinyIoT/thing-directory

Website: https://github.com/TinyIoT

Contributing Member Organizations: The parent fork has been developed as part of LinkSmart by Fraunhofer-Gesellschaft

WoT CoAP Server supporting DNS-SD: TD Exposer

Basic Rust-based CoAP server, providing a TD resource that can be discovered using DNS-SD and multicast DNS.

Usage: The application can be started from the command line using Rust's package manager cargo.

Public Repository: https://github.com/JKRhb/wot-coap-dns-sd

Contributing Member Organizations: Invited Experts

WoT Experimental: Thing

The WoT Experimental is a collection of Thing implementations that aims to test different features of the TD specification such as WoT operations, Data Schema variations and API Key usage in Body.

Usage: Command line

Public Repository: https://github.com/egekorkan/wot-implementations

Contributing Member Organizations:Siemens AG

WoT Hive directory

WoT Hive is an implementation of a W3C Web of Things directory. This implementation is compliant with the standard specification but aims at providing enriched features thanks to the usage of other W3C standards related to Semantic Web technologies.

Usage: Directory

Public Repository: https://github.com/oeg-upm/wot-hive

Website: https://github.com/oeg-upm/wot-hive

Contributing Member Organizations: Universidad Politécnica de Madrid

Zion: A scalable Thing Description Directory

Zion implements the standard TDD APIs with a set of extentions to cover the use cases of VAIMEE

Zion employes the best open source technologies to provide a scalable TDD service. Zion wants to be fast, ease to use and flexible. Our goal is to build a service tailored for entrepise use and scalable to different deployments from small set of TDs in the Edge to high loads of the Cloud. Currently, Zion is written in Typescript and supports the following features:

Usage: Directory

Public Repository: https://github.com/vaimee/zion

Website: https://zion.vaimee.com/

Contributing Member Organizations: Invited Experts

8. Security

The Web of Things (WoT) Architecture specification describes systems that include features to support security. Functional aspects of assertions associated with security features are validated in the same fashion as other functional features.

9. Test results

The aim of this section is to summarize the assertions from the Web of Things (WoT) Architecture document and summarize the results from the implementation reports received in the CR period. The tables in each section below lists all assertions derived from the Web of Things (WoT) Architecture document.

The headers for these tables are described as follows:

In the case of assertions with multiple mutually exclusive options (for example, enumerated values) each of these options may be tested separately and the results combined. In this case the 'pass' and 'total' values reported are the minimum value of any of the more detailed tests, while the 'fail' and 'not implemented' values report the maximum value of any of these tests. Since minimum and maximum value may be drawn from different detailed tests, the sum of the 'pass', 'fail', and 'not implemented' cases may not equal the 'total'. Instead the total represents the number of implementations for which all options were tested. For such cases the "child" assertions have underscores in their names prior to each value tested and the table row is also rendered in a different color.

9.1 Validation results

The following assertions have been validated by the implementers.

ID Category Req Context Assertion Parent Results
P F N T
1: arch-td-metadata Metadata Y In W3C WoT, the description metadata for a Thing instance MUST be available as a WoT Thing Description (TD) [WOT-THING-DESCRIPTION]. 9 0 1 10
2: arch-other-thing-representations Metadata N There MAY be other representations of a Thing such as an HTML-based user interface, simply an image of the physical entity, or even non-Web representations in closed systems. 6 0 3 9
3: arch-td-mandatory Metadata Y To be considered a Thing, however, at least one TD representation MUST be available. 9 0 1 10
4: arch-td-linking Metadata N WoT Thing Descriptions and WoT Thing Models MAY link to other Things, WoT Thing Models, and other resources on the Web to form a Web of Things. 7 0 3 10
5: arch-networked Links Y Things MUST be hosted on networked system components with a software stack to realize interaction through a network-facing interface, the WoT Interface of a Thing. 9 0 1 10
6: arch-affordances Affordance N In addition to navigation affordances (i.e., Web links), Things MAY offer three other types of Interaction Affordances defined by this specification: Properties, Actions, and Events. 9 0 1 10
7: arch-property-dataschema Affordances N If the data format is not fully specified by the Protocol Binding used (e.g., through a media type), Properties MAY contain one data schema for the exposed state. 7 0 1 8
8: arch-action-functions Affordance N An Action MAY manipulate state that is not directly exposed (cf. Properties), manipulate multiple Properties at a time, or manipulate Properties based on internal logic (e.g., toggle). 6 0 4 10
9: arch-action-process Affordance N Invoking an Action MAY also trigger a process on the Thing that manipulates state (including physical state through actuators) over time. 6 0 4 10
10: arch-action-dataschema Affordance N If the data format is not fully specified by the Protocol Binding used (e.g., through a media type), Actions MAY contain data schemas for input parameters and output results. 6 0 3 9
11: arch-event-trigger Affordance N Events MAY be triggered through conditions that are not exposed as Properties. 5 0 5 10
12: arch-event-dataschema Affordance N If the data is not fully specified by the Protocol Binding used (e.g., through a media type), Events MAY contain data schemas for the event data and subscription control messages (e.g., a callback URI to subscribe with a Webhook). 5 0 4 9
13: arch-rel-types Links Y Extension relation types MUST be compared as strings using ASCII case-insensitive comparison, (c.f. ASCII case insensitive). (If they are serialized in a different format they are to be converted to URIs). 2 0 6 8
14: arch-rel-type-lowercase Links N Nevertheless, all-lowercase URIs SHOULD be used for extension relation types [RFC8288]. 3 0 5 8
15: arch-form-iris Links Y Form contexts and submission targets MUST both be Internationalized Resource Identifiers (IRIs) [RFC3987]. 9 0 1 10
16: arch-form-iris2 Links N Form context and submission target MAY point to the same resource or different resources, where the submission target resource implements the operation for the context. 9 0 1 10
17: arch-op-request-method Operations Y The request method MUST identify one method of the standard set of the protocol identified by the submission target URI scheme. 9 0 1 10
18: arch-op-expected-request Operations N Form fields are optional and MAY further specify the expected request message for the given operation. 7 0 3 10
19: arch-op-form-fields-protocol Operations N Form fields MAY depend on the protocol used for the submission target as specified in the URI scheme. 7 0 3 10
20: arch-hypermedia Links Y Interaction Affordances MUST include one or more Protocol Bindings. 8 0 2 10
21: arch-hypermedia-protocol-binding Links Y Protocol Bindings MUST be serialized as hypermedia controls to be self-descriptive on how to activate the Interaction Affordance. 6 0 4 10
22: arch-hypermedia-caching Links N The hypermedia controls MAY be cached outside the Thing and used for offline processing if caching metadata is available to determine the freshness. 2 0 7 9
23: arch-media-type Links Y All data (a.k.a. content) exchanged when activating Interaction Affordances MUST be identified by a media type [RFC2046] in the Protocol Binding. 9 0 1 10
24: arch-media-type-extra Links N Protocol Bindings MAY have additional information that specifies representation formats in more detail than the media type alone. 3 0 7 10
25: arch-schema Metadata N Thus, the Interaction Affordance for structured data types SHOULD be associated with a data schema to provide more detailed syntactic metadata for the data exchanged. 8 0 1 9
26: arch-intermediary-td-extra-protocols Links N If necessary, a TD generated by an Intermediary MAY contain interfaces for other communication protocols. 3 0 4 7
27: arch-security-consideration-separate-security-data Security N There SHOULD be a strict separation of Public Security Metadata and Private Security Data. 5 0 4 9
28: arch-security-consideration-auth-private-data Security N Authentication and authorization SHOULD be established based on separately managed Private Security Data. 5 0 4 9
29: arch-security-consideration-no-private-security-data Security Y Producers of TDs MUST ensure that no Private Security Data is included in TDs. 4 0 5 9
30: arch-security-consideration-communication-binding Security N Whenever possible, TD creators SHOULD use the vetted communication metadata provided in the WoT Binding Templates. 3 0 4 7
31: arch-security-consideration-communication-platform Security N When generating TDs for an IoT Platform not covered by the WoT Binding Templates, TD creators SHOULD ensure that all the security requirements of the IoT Platform are satisfied. 2 0 6 8
32: arch-security-consideration-isolation-sensitive Security N The WoT Runtime SHOULD perform isolation of script instances and their data from each other in cases when scripts handle sensitive data. 3 0 6 9
33: arch-security-consideration-isolation-tenants Security N Similarly, the WoT Runtime implementation SHOULD perform isolation of WoT Runtime instances and their data from each other if a WoT device has more than one tenant. 3 0 6 9
34: arch-security-consideration-avoid-direct Security N The WoT Runtime SHOULD NOT directly expose low-level device hardware interfaces to the script developers. 4 0 6 10
35: arch-security-consideration-use-hal Security N A WoT Runtime implementation SHOULD provide a hardware abstraction layer for accessing the low-level device hardware interfaces. 2 0 7 9
36: arch-security-consideration-secure-update Security N Post-manufacturing provisioning or update of scripts, the WoT Runtime itself or any related data SHOULD be done in a secure fashion. 2 0 6 8
37: arch-security-consideration-secure-cred-storage Security N The WoT Runtime SHOULD securely store any provisioned security credentials, guaranteeing their integrity and confidentiality. 4 0 5 9
38: arch-security-consideration-secure-cred-isolation Security N In case there are more than one tenant on a single WoT-enabled device, a WoT Runtime implementation SHOULD isolate each tenant's provisioned security credentials from other tenants. 3 0 7 10
39: arch-security-consideration-no-expose-cred Security N In order to minimize a risk that provisioned security credentials get compromised, the WoT Runtime implementation SHOULD NOT expose any API for scripts to query provisioned security credentials. 2 0 7 9
40: arch-security-consideration-limit-cred-access Security N Such credentials (or even better, abstract operations that use them but do not expose them) SHOULD only be accessible to the underlying protocol implementation that uses them. 4 0 5 9
41: arch-security-consideration-limit-trust Security N Trust relationships SHOULD be as restricted as possible, ideally pairwise and limited to precisely the access required. 6 0 4 10
42: arch-security-consideration-segmented-network Security N In the case of implicit access control via access to a common network a segmented network SHOULD be used. 3 0 4 7
43: arch-security-consideration-tls-mandatory-pub Security Y When a Thing is made available on the public internet so it can be accessed by anyone, from anywhere, then it MUST be protected by secure transport such as TLS or DTLS. 4 0 4 8
45: arch-security-consideration-tls-optional-on-lan Security N Private networks such as a LAN, protected by a firewall, MAY use the Trusted Environment approach of depending on network security only. 7 0 1 8
46: arch-security-consideration-tls-1-3 Security N When secure transport over TCP is appropriate, then at least TLS 1.3 [RFC8446] SHOULD be used. 5 0 5 10
47: arch-security-consideration-tls-1-2 Security N If TLS 1.3 cannot be used for compatibility reasons but secure transport over TCP is appropriate, TLS 1.2 [RFC5246] MAY be used. 7 0 3 10
48: arch-security-consideration-dtls-1-2 Security N If DTLS 1.3 cannot be used for compatibility reasons but secure transport over UDP is appropriate, then DTLS 1.2 [RFC6347] MAY be used. 2 0 8 10
49: arch-security-consideration-no-earlier-tls-or-dtls Security Y Versions of DTLS or TLS earlier than 1.2 MUST NOT be used for new development. 5 0 5 10
50: arch-privacy-consideration-min-explicit-pii Privacy N Storage of explicit PII in TDs SHOULD be minimized as much as possible. 3 0 7 10
51: arch-privacy-consideration-explicit-pii Privacy N TDs that can be associated with a person SHOULD generally be treated as if they contained PII and subject to the same management policies as other PII, even if they do not explicitly contain it. 2 0 7 9
52: arch-privacy-consideration-dist-td-auth Privacy N Distribution mechanisms for TDs SHOULD ensure they are only provided to authorized Consumers. 4 0 5 9
53: arch-privacy-consideration-access-control-mandatory-person Privacy N Things returning data or metadata (such as TDs) associated with a person SHOULD use some form of access control. 3 0 7 10
54: arch-privacy-consideration-id-access-control-mandatory-immutable Privacy N Services returning Thing Descriptions with immutable IDs SHOULD use some form of access control. 2 0 7 9

Appendix

Acknowledgements

The Web of Things Working Group would like to acknowledge the contributions to the making of this document from the following individuals in various capacities, including contributions to past testing inputs which were used for compatibility testing: