Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 72 additions & 0 deletions packages/binding-coap/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,78 @@ servient
});
```

## Using PSK with CoAPs (DTLS)

The CoAP binding also supports secure communication over `coaps://` using DTLS with Pre-Shared Keys (PSK).

To use PSK security, define a `psk` security scheme in the Thing Description and provide the credentials when consuming the Thing.

### Thing Description Example (PSK)

```json
{
"title": "SecureThing",
"securityDefinitions": {
"psk_sc": {
"scheme": "psk"
}
},
"security": ["psk_sc"],
"properties": {
"count": {
"type": "integer",
"forms": [
{
"href": "coaps://localhost:5684/count"
}
]
}
}
}
```

### Client Example with PSK

```js
const { Servient } = require("@node-wot/core");
const { CoapClientFactory } = require("@node-wot/binding-coap");

const servient = new Servient();
servient.addClientFactory(new CoapClientFactory());

servient
.start()
.then(async (WoT) => {
try {
const td = await WoT.requestThingDescription("coaps://localhost:5684/secureThing");
const thing = await WoT.consume(td);

// configure PSK security
thing.setSecurity(
td.securityDefinitions,
{
identity: "Client_identity",
psk: "secretPSK"
}
);

const value = await thing.readProperty("count");
console.log("count value is:", await value.value());
} catch (err) {
console.error("Script error:", err);
}
})
.catch((err) => {
console.error("Start error:", err);
});
```

### Notes

- The `identity` must match the server configuration.
- The `psk` must match the server's configured secret.
- Currently, only the `psk` security scheme is supported for `coaps://` in this binding.

### Server Example

The server example produces a thing that allows for setting a property `count`. The thing is reachable through CoAP.
Expand Down