mirror of
https://github.com/moparisthebest/xeps
synced 2024-11-15 13:55:03 -05:00
1757 lines
308 KiB
XML
1757 lines
308 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<!DOCTYPE xep SYSTEM 'xep.dtd' [
|
|
<!ENTITY % ents SYSTEM 'xep.ent'>
|
|
%ents;
|
|
]>
|
|
<?xml-stylesheet type='text/xsl' href='xep.xsl'?>
|
|
<xep>
|
|
<header>
|
|
<title>Internet of Things - Provisioning</title>
|
|
<abstract>This specification describes an architecture for efficient provisioning of services, access rights and user privileges in for the Internet of Things, where
|
|
communication between Things is done using the XMPP protocol.</abstract>
|
|
&LEGALNOTICE;
|
|
<number>0324</number>
|
|
<status>Experimental</status>
|
|
<type>Standards Track</type>
|
|
<sig>Standards</sig>
|
|
<approver>Council</approver>
|
|
<dependencies>
|
|
<spec>XMPP Core</spec>
|
|
<spec>XEP-0001</spec>
|
|
<spec>XEP-0030</spec>
|
|
<spec>XEP-0323</spec>
|
|
<spec>XEP-0325</spec>
|
|
</dependencies>
|
|
<supersedes/>
|
|
<supersededby/>
|
|
<shortname>sensor-network-provisioning</shortname>
|
|
<author>
|
|
<firstname>Peter</firstname>
|
|
<surname>Waher</surname>
|
|
<email>peter.waher@clayster.com</email>
|
|
<jid>peter.waher@jabber.org</jid>
|
|
<uri>http://www.linkedin.com/in/peterwaher</uri>
|
|
</author>
|
|
<revision>
|
|
<version>0.2</version>
|
|
<date>2014-03-10</date>
|
|
<initials>pw</initials>
|
|
<remark>
|
|
<p>Corrected downloadPrivileges example.</p>
|
|
<p>Made several corrections of the language.</p>
|
|
<p>Expanded the introduction.</p>
|
|
<p>Changes "Sensor Networks" to "Internet of Things".</p>
|
|
<p>Fixed links to documents with new numbers.</p>
|
|
<p>Changed namespace urn:xmpp:sn to urn:xmpp:iot</p>
|
|
</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.1</version>
|
|
<date>2013-04-16</date>
|
|
<initials>psa</initials>
|
|
<remark>
|
|
<p>Initial published version approved by the XMPP Council.</p>
|
|
</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.0.5</version>
|
|
<date>2013-04-04</date>
|
|
<initials>pw</initials>
|
|
<remark>
|
|
<p>Added control use cases.</p>
|
|
<p>Grouped use cases.</p>
|
|
</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.0.4</version>
|
|
<date>2013-04-01</date>
|
|
<initials>pw</initials>
|
|
<remark>
|
|
<p>Added altitude credentials.</p>
|
|
<p>Added resource information of original called to their corresponding JIDs.</p>
|
|
<p>Changed the return type of a rejected message.</p>
|
|
<p>Made images inline.</p>
|
|
<p>Converted the glossary into a definition list.</p>
|
|
</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.0.3</version>
|
|
<date>2013-03-18</date>
|
|
<initials>pw</initials>
|
|
<remark>
|
|
<p>Added information about how to read sensors from large subsystems.</p>
|
|
<p>Added friend recommendation message.</p>
|
|
<p>Added client/device/service tokens.</p>
|
|
</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.0.2</version>
|
|
<date>2013-03-12</date>
|
|
<initials>pw</initials>
|
|
<remark>
|
|
<p>Added use cases for service access rights and corresponding user privileges.</p>
|
|
</remark>
|
|
</revision>
|
|
<revision>
|
|
<version>0.0.1</version>
|
|
<date>2013-03-11</date>
|
|
<initials>pw</initials>
|
|
<remark>
|
|
<p>First draft.</p>
|
|
</remark>
|
|
</revision>
|
|
</header>
|
|
<section1 topic='Introduction' anchor='intro'>
|
|
<p>
|
|
This specification describes an architecture for efficient provisioning of services, access rights and user privileges in for the Internet of Things, where
|
|
communication between Things is done using the XMPP protocol.
|
|
</p>
|
|
<p>
|
|
Note has to be taken, that this XEP, and other Internet of Things-related XEP's, are designed for implementation in small devices, many of which have very limited
|
|
amount of memory (both RAM and ROM) or resources (processing power). Therefore, simplicity is of utmost importance. Furthermore, Internet of Things networks can
|
|
become huge, easily containing millions or billions of devices in peer-to-peer networks.
|
|
</p>
|
|
<p>
|
|
An added complexity in the provisioning case is that Things (small sensors for example) often have very limited user interface options. Therefore, this document
|
|
explains how provisioning can be done efficiently using a trusted third party with more power and options when it comes to user interface design and storage.
|
|
</p>
|
|
<p>
|
|
This document defines the following important operations to allow for efficient provisioning of services in the Internet of Things, based on XMPP:
|
|
</p>
|
|
<ul>
|
|
<li>What Things knows what Things</li>
|
|
<li>What Things can read data from what Things, and what data.</li>
|
|
<li>What Things can control what Things, and what parts.</li>
|
|
<li>Control of Users in the network.</li>
|
|
<li>Control of Services in the network.</li>
|
|
<li>Control generic boolean User Privileges in the network.</li>
|
|
</ul>
|
|
<p>
|
|
This XEP relies on &xep0323; and &xep0325; for sensor data readout and control interfaces.
|
|
Internet of Things contain many different architectures and use cases. For this reason, the IoT standards have been divided into multiple XEPs according to the following table:
|
|
</p>
|
|
<table caption='Internet of Things XEPs'>
|
|
<tr>
|
|
<th>XEP</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td>xep-0000-IoT-BatteryPoweredSensors</td>
|
|
<td>Defines how to handle the peculiars related to battery powered devices, and other devices intermittently available on the network.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xep-0000-IoT-Discovery</td>
|
|
<td>Defines the peculiars of Thing discovery in Internet of Things. Apart from discovering Things by JID, it also defines how to discover Things based on location, etc.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xep-0000-IoT-Events</td>
|
|
<td>Defines how Things send events, how event subscription, hysteresis levels, etc., are configured.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xep-0000-IoT-Interoperability</td>
|
|
<td>Defines guidelines for how to achieve interoperability in Internet of Things, publishing interoperability interfaces for different types of devices.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xep-0000-IoT-Multicast</td>
|
|
<td>Defines how sensor data can be multicast in efficient ways.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xep-0000-IoT-PubSub</td>
|
|
<td>Defines how efficient publication of sensor data can be made in Internet of Things.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>xep-0000-IoT-Chat</td>
|
|
<td>Defines how human-to-machine interfaces should be constructed using chat messages to be user friendly, automatable and consistent with other IoT extensions and possible underlying architecture.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>XEP-0322</td>
|
|
<td>
|
|
Defines how to EXI can be used in XMPP to achieve efficient compression of data. Albeit not a Internet of Things specific XEP, this XEP should be considered
|
|
in all Internet of Things implementations where memory and packet size is an issue.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>XEP-0323</td>
|
|
<td>
|
|
Provides the underlying architecture, basic operations and data structures for sensor data communication over XMPP networks.
|
|
It includes a hardware abstraction model, removing any technical detail implemented in underlying technologies. This XEP is used by all other
|
|
Internet of Things XEPs.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>XEP-0324</td>
|
|
<td>This specification. Defines how provisioning, the management of access privileges, etc., can be efficiently and easily implemented.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>XEP-0325</td>
|
|
<td>Defines how to control actuators and other devices in Internet of Things.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>XEP-0326</td>
|
|
<td>Defines how to handle architectures containing concentrators or servers handling multiple Things.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>XEP-0331</td>
|
|
<td>Defines extensions for how color parameters can be handled, based on &xep0004;</td>
|
|
</tr>
|
|
<tr>
|
|
<td>XEP-0336</td>
|
|
<td>Defines extensions for how dynamic forms can be created, based on &xep0004;, &xep0122;, &xep0137; and &xep0141;.</td>
|
|
</tr>
|
|
</table>
|
|
</section1>
|
|
<section1 topic='Glossary' anchor='glossary'>
|
|
<p>The following table lists common terms and corresponding descriptions.</p>
|
|
<dl>
|
|
<di>
|
|
<dt>Actuator</dt>
|
|
<dd>Device containing at least one configurable property or output that can and should be controlled by some other entity or device.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Authority</dt>
|
|
<dd>Used synonymously with Provisioning Server.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Computed Value</dt>
|
|
<dd>A value that is computed instead of measured.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Concentrator</dt>
|
|
<dd>Device managing a set of devices which it publishes on the XMPP network.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Field</dt>
|
|
<dd>
|
|
One item of sensor data. Contains information about: Node, Field Name, Value, Precision, Unit, Value Type, Status, Timestamp, Localization information, etc.
|
|
Fields should be unique within the triple (Node ID, Field Name, Timestamp).
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Field Name</dt>
|
|
<dd>Name of a field of sensor data. Examples: Energy, Volume, Flow, Power, etc.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Field Type</dt>
|
|
<dd>What type of value the field represents. Examples: Momentary Value, Status Value, Identification Value, Calculated Value, Peak Value, Historical Value, etc.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Historical Value</dt>
|
|
<dd>A value stored in memory from a previous timestamp.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Identification Value</dt>
|
|
<dd>A value that can be used for identification. (Serial numbers, meter IDs, locations, names, etc.)</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Localization information</dt>
|
|
<dd>Optional information for a field, allowing the sensor to control how the information should be presented to human viewers.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Meter</dt>
|
|
<dd>A device possible containing multiple sensors, used in metering applications. Examples: Electricity meter, Water Meter, Heat Meter, Cooling Meter, etc.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Momentary Value</dt>
|
|
<dd>A momentary value represents a value measured at the time of the read-out.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Node</dt>
|
|
<dd>
|
|
Graphs contain nodes and edges between nodes. In Internet of Things, sensors, actuators, meters, devices, gateways, etc., are often depicted as nodes whereas links between sensors (friendships)
|
|
are depicted as edges. In abstract terms, it's easier to talk about a Node, rather than list different possible node types (sensors, actuators, meters, devices, gateways, etc.).
|
|
Each Node has a Node ID.
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Node ID</dt>
|
|
<dd>
|
|
An ID uniquely identifying a node within its corresponding context. If a globally unique ID is desired, an architecture should be used using a universally accepted
|
|
ID scheme.
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Parameter</dt>
|
|
<dd>
|
|
Readable and/or writable property on a node/device. The XEP-0326 &xep0326; deals with reading and writing parameters
|
|
on nodes/devices. Fields are not parameters, and parameters are not fields.
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Peak Value</dt>
|
|
<dd>A maximum or minimum value during a given period.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Provisioning Server</dt>
|
|
<dd>An application that can configure a network and provide services to users or Things. In Internet of Things, a Provisioning Server knows who knows whom,
|
|
what privileges users have, who can read what data and who can control what devices and what parts of these devices.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Precision</dt>
|
|
<dd>
|
|
In physics, precision determines the number of digits of precision. In sensor networks however, this definition is not easily applicable. Instead, precision
|
|
determines, for example, the number of decimals of precision, or power of precision. Example: 123.200 MWh contains 3 decimals of precision. All entities parsing and
|
|
delivering field information in sensor networks should always retain the number of decimals in a message.
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Sensor</dt>
|
|
<dd>
|
|
Device measuring at least one digital value (0 or 1) or analog value (value with precision and physical unit). Examples: Temperature sensor, pressure sensor, etc.
|
|
Sensor values are reported as fields during read-out. Each sensor has a unique Node ID.
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>SN</dt>
|
|
<dd>Sensor Network. A network consisting, but not limited to sensors, where transport and use of sensor data is of primary concern. A sensor network may contain actuators, network applications, monitors, services, etc.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Status Value</dt>
|
|
<dd>A value displaying status information about something.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Timestamp</dt>
|
|
<dd>Timestamp of value, when the value was sampled or recorded.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Thing</dt>
|
|
<dd>
|
|
Internet of Things basically consists of Things connected to the Internet. Things can be any device, sensor, actuator etc., that can have an
|
|
Internet connection.
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Thing Registry</dt>
|
|
<dd>
|
|
A registry where Things can register for simple and secure discovery by the owner of the Thing. The registry can also be used as a database for meta information
|
|
about Things in the network.
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Token</dt>
|
|
<dd>
|
|
A client, device or user can get a token from a provisioning server. These tokens can be included in requests to other entities in the network, so these entities can validate
|
|
access rights with the provisioning server.
|
|
</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Unit</dt>
|
|
<dd>Physical unit of value. Example: MWh, l/s, etc.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Value</dt>
|
|
<dd>A field value.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Value Status</dt>
|
|
<dd>Status of field value. Contains important status information for Quality of Service purposes. Examples: Ok, Error, Warning, Time Shifted, Missing, Signed, etc.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>Value Type</dt>
|
|
<dd>Can be numeric, string, boolean, Date & Time, Time Span or Enumeration.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>WSN</dt>
|
|
<dd>Wireless Sensor Network, a sensor network including wireless devices.</dd>
|
|
</di>
|
|
<di>
|
|
<dt>XMPP Client</dt>
|
|
<dd>Application connected to an XMPP network, having a JID. Note that sensors, as well as applications requesting sensor data can be XMPP clients.</dd>
|
|
</di>
|
|
</dl>
|
|
</section1>
|
|
<section1 topic='Use Cases' anchor='usecases'>
|
|
<p>
|
|
The most basic use case in sensor networks is to read out sensor data from a sensor. However, since protecting end-user integrity and system security is vital, access
|
|
rights and user privileges have to be imposed on the network.
|
|
</p>
|
|
<p>
|
|
To store access rights in all sensors might be very impractical. Not only does it consume memory, it's difficult to maintain track of the current system status, make sure
|
|
all devices have the latest configuration, distribute changes to the configuration, etc.
|
|
</p>
|
|
<p>
|
|
Furthermore, most sensors and small devices have very limited possibility to provide a rich user interface. Perhaps all it can do is to provide a small LED and a button,
|
|
useful perhaps for installing the sensor in the network, but not much more.
|
|
</p>
|
|
<p>
|
|
As an added complexity, the sensor network operator might not even have access to the XMPP Servers used, and provisioning needs to lie outside of the XMPP Server domains.
|
|
</p>
|
|
<p>
|
|
To solve this problem in an efficient manner, an architecture using distributed trusted third parties is proposed. Such third parties would:
|
|
</p>
|
|
<ul>
|
|
<li>Provide a rich user interface and configurable options to end user or back end systems.</li>
|
|
<li>Control friendships (who can communicate with whom).</li>
|
|
<li>Control content available for different friends (what can be read by whom).</li>
|
|
<li>Control operations accessible by different friends (what can be controlled/configured by whom).</li>
|
|
<li>Provide additional interoperability services to nodes in the network (for instance, unit conversion).</li>
|
|
</ul>
|
|
<section2 topic='Delegating trust'>
|
|
<section3 topic='Delegating original trust to a Provisioning Server'>
|
|
<p>
|
|
Trust is delegated to a provisioning server by a device, simply by befriending the provisioning server and asking it questions and complying with
|
|
its answers.
|
|
</p>
|
|
<p>
|
|
As an illustrative example, following is a short description of how such a trust relationship can be created in a scenario where the sensor only
|
|
has a single LED and a single button.
|
|
</p>
|
|
<ul>
|
|
<li>Somebody is installing the sensor, giving it a connection to an XMPP server and a JID, reachable from the provisioning server.</li>
|
|
<li>The provisioning server is told to create a friendship request to the new sensor.</li>
|
|
<li>The sensor flashes its LED for a given time (for example: 30 seconds).</li>
|
|
<li>Viewing the LED, the person installing the sensor presses the button.</li>
|
|
<li>Receiving the button press within the given time period, accepts the friendship request. Optionally, the device can give user feedback using the LED.</li>
|
|
<li>The device performs a service discovery of the new friend, having been a manually added friend.</li>
|
|
<li>If the new friend supports this provisioning extension, further responsibilities are delegated to this device.</li>
|
|
<li>As the last step the device asks the provisioning server for a token. This device token is later used in calls to other devices and can be used to check access rights.</li>
|
|
</ul>
|
|
<p>
|
|
The following diagram shows the general case:
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<p>
|
|
The successful case can also be illustrated in a sequence diagram, as follows:
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<p>
|
|
The following example shows how a device can request a device token from the provisioning server:
|
|
</p>
|
|
<example caption='Requesting a device token'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='13'>
|
|
<getToken xmlns='urn:xmpp:iot:provisioning' deviceId='WatchamacallitDevice1'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='13'>
|
|
<getTokenResponse xmlns='urn:xmpp:iot:provisioning' token='device0001'/>
|
|
</iq>]]>
|
|
</example>
|
|
<p>
|
|
The provisioning server must not return tokens that contain white space characters.
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> In many cases, an address to a provisioning server might be preprogrammed during production of the
|
|
device. In these cases, parts of the above procedure may not be necessary. All the client needs to do, if the provisioning server is not available
|
|
in the roster of the device, is to send a subscription request to the provisioning server, to alert the server of the existence of the device,
|
|
and possibly request a device token.
|
|
</p>
|
|
<p>
|
|
The following use cases will assume such a trust relationship has been created between the corresponding device and the provisioning server.
|
|
</p>
|
|
</section3>
|
|
<section3 topic='Delegating Secondary Trust'>
|
|
<p>
|
|
The <strong>isFriendResponse</strong> element returned by the provisioning server contains an attribute <strong>secondaryTrustAllowed</strong> that is by default
|
|
set to false. If the provisioning server has no problem with allowing multiple trust to be delegated by devices in the network, it can choose to set this
|
|
attribute to true in the response. If true, the device knows it has the right to add its own friends, or to add secondary trust relationships.
|
|
</p>
|
|
<p>
|
|
The following diagram continues with the example given above, of how a sensor with a limited user interface, can allow to manually add new friends, including new
|
|
trust relationships using a single LED and a button.
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
</section3>
|
|
<section3 topic='Multiple tokens'>
|
|
<p>
|
|
When multiple trust is used, the entity (client, user, service, etc.) has one token from each provisioning server. However, when sending a token to a third party,
|
|
the sender does not know what provisioning server(s) the third party uses to check access rights and user privileges. Therefore, the client must send all tokens, separated
|
|
by a space.
|
|
</p>
|
|
<p>
|
|
When a provisioning server receives a request containing multiple tokens, the most forgiving response must be returned.
|
|
</p>
|
|
<example caption='Readout request using multiple tokens'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='master@clayster.com/amr'
|
|
to='device@clayster.com'
|
|
id='15'>
|
|
<req xmlns='urn:xmpp:iot:sensordata' momentary='true' serviceToken='service0001 servicio0001' userToken='user0001' seqnr='4'/>
|
|
</iq>
|
|
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='16'>
|
|
<canRead xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' serviceToken='service0001 servicio0001' userToken='user0001' momentary='true'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='16'>
|
|
<canReadResponse xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' momentary='true' result='true'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='device@clayster.com'
|
|
to='master@clayster.com/amr'
|
|
id='15'>
|
|
<accepted xmlns='urn:xmpp:iot:sensordata' seqnr='4'/>
|
|
</iq>]]>
|
|
</example>
|
|
</section3>
|
|
</section2>
|
|
<section2 topic='Friendships'>
|
|
<section3 topic='Friendship request accepted'>
|
|
<p>
|
|
The following diagram displays how a friendship request from an external party can be handled, delegating the responsibility to a trusted third party:
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<p>
|
|
The communication between the XMPP Device and the Provisioning Server could be as follows:
|
|
</p>
|
|
<example caption='Friendship request accepted'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='1'>
|
|
<isFriend xmlns='urn:xmpp:iot:provisioning' jid='client1@clayster.com'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='1'>
|
|
<isFriendResponse xmlns='urn:xmpp:iot:provisioning' jid='client1@clayster.com' result='true'/>
|
|
</iq>]]>
|
|
</example>
|
|
<p>
|
|
<strong>Note:</strong> The provisioning server implicitly understands which two JIDs that are to be checked: The first one is the sender of the message, the second one
|
|
is the JID available in the <strong>jid</strong> attribute in the request.
|
|
</p>
|
|
<p>
|
|
<strong>Note 2:</strong> Any resource information in the JID must be ignored by the provisioning server.
|
|
</p>
|
|
</section3>
|
|
<section3 topic='Friendship request rejected'>
|
|
<p>
|
|
The following diagram displays a friendship request from an external party being rejected as a result of the trusted third party negating the friendship:
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<p>
|
|
The communication between the XMPP Device and the Provisioning Server could be as follows:
|
|
</p>
|
|
<example caption='Friendship request rejected'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='2'>
|
|
<isFriend xmlns='urn:xmpp:iot:provisioning' jid='client2@clayster.com'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='2'>
|
|
<isFriendResponse xmlns='urn:xmpp:iot:provisioning' jid='client2@clayster.com' result='false'/>
|
|
</iq>]]>
|
|
</example>
|
|
</section3>
|
|
<section3 topic='Unfriending existing friends'>
|
|
<p>
|
|
If the provisioning server decides that two friends in the network should no longer be friends and communicate with each other, it simply sends a message to
|
|
at least one of the friends as follows:
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<p>
|
|
The provisioning server should only send such messages to clients that have previously asked the provisioning server if friendship requests should be accepted or not.
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> The device should only honor such messages, if the sender is the trusted third party. Such messages received from other entities not trusted should
|
|
be silently ignored.
|
|
</p>
|
|
|
|
<example caption='Unfriending existing friend'>
|
|
<![CDATA[
|
|
<message from='provisioning@clayster.com'
|
|
to='device@clayster.com'>
|
|
<unfriend xmlns='urn:xmpp:iot:provisioning' jid='client2@clayster.com'/>
|
|
</message>]]>
|
|
</example>
|
|
</section3>
|
|
<section3 topic='Recommending friendships'>
|
|
<p>
|
|
The provisioning server can, apart from accepting new friendships and rejecting old friendships, also recommend new friendships. In this case, the provisioning server
|
|
simply sends a message to one or both of the soon to be friends, as follows:
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<example caption='Recommending friendships'>
|
|
<![CDATA[
|
|
<message from='provisioning@clayster.com'
|
|
to='device@clayster.com'>
|
|
<friend xmlns='urn:xmpp:iot:provisioning' jid='client2@clayster.com'/>
|
|
</message>]]>
|
|
</example>
|
|
<p>
|
|
Note that the receptor can still ask the provisioning server if it can form a friendship with the suggested friend, using the <strong>isFriend</strong> command.
|
|
</p>
|
|
</section3>
|
|
</section2>
|
|
<section2 topic='Device Read-out'>
|
|
<section3 topic='Rejecting read-outs'>
|
|
<p>
|
|
An important use case for provisioning in sensor networks is who gets to read out sensor data from which sensors. This use case details how communication with a
|
|
provisioning server can help the device determine if a client has sufficient access rights to read the values of the device.
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> This use case is an extension of the use case 'Read-out rejected' in the XEP-0323
|
|
<link url='http://xmpp.org/extensions/xep-0323.html'>Internet of Things - Sensor Data</link>.
|
|
</p>
|
|
<p>
|
|
The following example shows the communication first between the client and the device, then between the device and the provisioning server, and last between the device and the client:
|
|
</p>
|
|
<example caption='Rejecting read-outs'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='master@clayster.com/amr'
|
|
to='device@clayster.com'
|
|
id='3'>
|
|
<req xmlns='urn:xmpp:iot:sensordata' momentary='true' serviceToken='service0001' userToken='user0001' seqnr='1'/>
|
|
</iq>
|
|
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='4'>
|
|
<canRead xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' serviceToken='service0001' userToken='user0001' momentary='true'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='4'>
|
|
<canReadResponse xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' momentary='true' result='false'/>
|
|
</iq>
|
|
|
|
<iq type='error'
|
|
from='device@clayster.com'
|
|
to='master@clayster.com/amr'
|
|
id='3'>
|
|
<rejected xmlns='urn:xmpp:iot:sensordata' seqnr='1'>
|
|
<error>Access denied.</error>
|
|
</rejected>
|
|
</iq>]]>
|
|
</example>
|
|
</section3>
|
|
<section3 topic='Restricting nodes during read-out'>
|
|
<p>
|
|
In case the device handles multiple nodes that can be read, the provisioning server has the possibility to grant read-out, but to limit the nodes that can be read out.
|
|
The provisioning server does this by returning the list of nodes that can be read.
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwMAAAFuCAIAAABStVPZAAAfx0lEQVR4nO3dba8k1WEn8PpKnjFopr6IjUkggKnPsFLiDbvBQOyA+m2yxs7ywibWSMGL1FL2wSZhtZIjh4kJtkmaBw8kxoB5Gj8D0t0X3fVc3bdv364+dU79fhqJO327T52qmn/Xf07XcLMzAIC5ykJPAAAgGE0IAJivugllAACzMdCETl3DmAanHoC50YSoOfUAzI0mRM2pB2BuNCFqTj0Ac6MJUXPqAZibSzah1SLP8sWq/2CWZVmxPMYMu0MXy7OzZZH1N7vDssjKl7Umtc84jeccuPXLGjzIe73sQmdADQJghkZoQqtFnmVFMUJdWI988X61WuT5YjXQhE6y9Us7qAldcLZqEADztE8TKtd46mpTPpIXRe8iXV6CWysny2IzQnVt7j1SbaV80bLYFKrNs+pp1DWr+5zBuZVFaPua0GqRZ1meb5ayFuUI1Yvyxergrbe2leeNDQ4d0T0PcnX0su6erae7rGe7RxlSgwCYrT2aUO/DoHq5Yd0gWhfp+pv166rr9PYv6nWP1rcamym7UOvzqfo5zcLSmdvms7Fzm1A5YFmfBh45YOvNbTXq0jndbOdBrl9VjtRtQqv914TUIADm7GJrQvWlub5zZqAlNZQX5X5daj9SL3JUCx2NlrD5criLtBrAwNyqInROE2pXtH2b0Hlbb22rMY/OzvYWhfpDDa4RbUY9tAmpQQDM3D5NqNRcv9myXNG6/lbfHa4XrUcG7oXZd02o10Xac6s+GztREzp/IWdLEWwvpJ03VN2fyiNcv2zPJqQGAcAeTegCt7B0Lr/tD51aI/Qf6d2NNHAXzuZFnTt1Wmsh3bkt6yLUWYtp3Mu0VxM6ZOvDTWjLzmbZ5k6i8245au5Jo1xVr28e8m1lSA0CgLNJ//+EDvuXXu3icsp/7B5+6xcxlbMMAEEl14SGlrBOKOzW9zWVUwwAoU24CTEO5xcAKprQvDi5ANCkCc2IMwsAHZrQXDitANA33IRIT6A/YAAwaZk1IQBgtjQhAGC+NCEAYL40IQBgvjQhAGC+NCEAYL40IQBgvjQhAGC+NCEAYL40IQBgvjQhAGC+NCEAYL5GaUKn+qGicbjkwYQTCJ2SCQl9KuB8oVMyLUc5npsv+g9dZtCfvfJPP3vln9569YW3Xn3h56/d/PlrN99+/Z/ffv2f3/npD9/56Q/fvfXiu7de/MUb//Lemy+99+ZL7//7j97/9x998B8//uA/fvzhz37y4c9+8tFbL3/01su3f/6v61+/fPvffvn2v/3qndWv3ln9+t1Xfv3uK7/5xau/+cWrv33vtd++99rv3n/9d++//vsPfvrxh7c+/vDWJx+98clHb3x6+80p/DrKSYKxyazAEhGBPW5mNaEIThKMTWYFlogI7HEzqwmNfpKe+95z61+XPKowHpkVWCIisMfNrCYUwUmCscmswBIRgT1uZjWhCE4SjE1mBZaICOxxMxtvE3ry/urG8Xu/8bv3X//9t79w/dG///jDW5/cuPv6o/+w93F8/onHnpr4SYKxjZXZ7//xnY1/4nHt4e/u9cZ64+7rjz0f77sqjO2QwP7f/3RH8x9c/cFfXawJffuua4/8fTewF4rqOLmecxN68v7sylf+cXOSvnNvdu2R5+omdKG6evOh6/dpQszdiE3onq+Vb6zf/cod2QN/M+m/YgosUTiwCf3BX5aB/btHP/uZR/+fNaH6eG6+6D900pN0oSb09OevPfzd7kkaWBN6/onNX0ivPnHzzU9vv/npjbuv33l1/dD1x56vnjDeX0C9sRKFkzShV3/z9F3ZvV//7Xvf+4vNX06vPP7CrY8/vPXsH119/OYbn95+89ObD12/86GX6787NiPci7PAMldHa0Lf/Nydn/1MlmX3fet//flnN6tF9z/9yq/ffeWZe8rlhh986dod//lH1ZrQC396PSuT+Fg/qtmDNwavto01of63qpffd/eDdz70sia0TxN68eEr9z/dq6u9JvTyY1fLo/zUg9ndz95+89Mbd2fro7x+w71tTQjOzk7WhP7xS9fu/fpLX75y7ZHnfvf+67//4BtfzL7wPz689cmNu7M/+u/rzD54o37HfPmxq9k6njcfarxplnEWWObq8p+O3flf/u6jt16+/c3PZX/4327//F9/+Gefyf7wa796Z/Wrd752f/b5v333ld88fVd2z5O/fe+1l7585YFv15+O/fjRq1+80f10rI7qjqttowl1vlVfrKtvaUIXXxP6xne+PdCEnr2v+aHo1SduNj+nfOpBTQhKp1wTeubeVjAff+HWJx/9w+N33v1s4z10ndNn7yv/fjkYZ4Flri69JlQG9pufu/O//s91E7rvW+uL7P/+yh1XvvL99cfZdz3z3tcfyO76Tus+ob/+Ym9NaPN3mNtvfnr7+Sfu3HK1ba4Jtb/17H1Vop+yJnT4fULZvd/YuSZU/tKEYMgp7xNqrAnVtx385NGrD97XfaOsI9xaExrxl8AShTGaUHdN6Bev/svDVx64965rX/7e8B3TN+6uUjm4JrR/E7ImNOq/Has/ucy2nZubD13Psmy0MuSNlSiM2IQaKzn3P73+20t1n1CWrT8d++iNT24+dL15P9+u+4TKOAssc3X0JvTLt7v3CW0+zs6ufPUHrX879uNHr9ZLs7vvE9q7CblPyP/qAMKTWYElIokFtrUmdMGFCU1o6u+q3liJhcwKLBFJLrBPPXjoLYCa0NTfVb2xEguZFVgiIrDHzawmFMFJgrHJrMASEYE9bmY1oQhOEoxNZgWWiAjscTOrCUVwkmBsMiuwRERgj5tZTSiCkwRjk1mBJSKjBvZv76n+dxVXvvqDSQf2WJnVhCI4STA2mRVYIjJiYL/1+eyeJ+v/n9AdX3ppwoE9VmY1oQhOEoxNZgWWiIwY2O//8bU7/uTFbmCfK/9vqOsfj/PGJ/VPUS3/3fvmh4ht/cHn1U/OmWBmNSFvrCCzAktMxg3s9//kWvvTsR89cuXaI8/9/oOffvzhX38x+8KzH73xSfW/QCy/WP/oseEffD75H2mlCXljBZkVWGJyqsA++UB21zPrH+5Zu/r4zTc+af1InPrHJ+/8wefTzawm5I0VZFZgicl4gX3xzz5z7eH/Uwb2u1+9465nWmtCZWAb/eblx+ofn7zzB59PN7OakDdWkFmBJSan+rdj2QN/07lPKMvKT8fqftP88cm7fvD5dDOrCXljBZkVWGIisMfNrCYUwUmCscmswBIRgT1uZjWhCE4SjE1mBZaICOxxM6sJRXCSYGwyK7BERGCPm1lNKIKTBGOTWYElIgJ73MxqQhGcJBibzAosERHY42ZWE4rgJMHYZFZgiYjAHjezmlAEJwnGJrMCS0QE9riZ1YQiOEkwNpkVWCIisMfNrCYUwUmCscmswBIRgT1uZjWhCE4SjE1mBZaICOxxM6sJRXCSYGwyK7BERGCPm1lNKIKTBGOTWYElIgJ73MxqQhGcJBibzAosERHY42ZWE4rgJMHYZFZgiYjAHjezmlAEJwnGJrMCS0QE9riZ1YQiOEkwNpkVWCIisMfNrCYUwUmCscmswBIRgT1uZjWhCE4SjE1mBZaICOxxM6sJRXCSYGwyK7BERGCPm1lNKIKTBGOTWYElIgJ73MxqQhGcJBibzAosERHY42ZWE4rgJMHYZFZgiYjAHjezYzUhKt5Ymb7QKZkQgWX6QqdkWibahCrV/IL8ah6gKfw61lGF8ciswBIRgT1KZjWhCE4SnIzMCiwREdijZFYTiuAkwcnIrMASEYE9SmbHbUJhJbMjMBMyCxFJJrCaEDAVMgsRSSawmhAwFTILEUkmsJoQMBUyCxFJJrApNyEAgN00IQBgvjQhAGC+NCEAYL5SbkLJ7AjMhMxCRJIJrCYETIXMQkSSCawmBEyFzEJEkgmsJgRMhcxCRJIJrCYETIXMQkSSCawmBEyFzEJEkgmsJgRMhcxCRJIJbMpNCABgN00IAJgvTQgAmC9NCACYr5SbUDI7AjMhsxCRZAKrCQFTIbMQkWQCqwkBUyGzEJFkAqsJAVMhsxCRZAKrCQFTIbMQkWQCqwkBUyGzEJFkAqsJAVMhsxCRZAKbchMCANhNEwIA5ksTAgDmSxMCAOYr5SaUzI7ATMgsRCSZwGpCwFTILEQkmcBqQsBUyCxEJJnAakLAVMgsRCSZwGpCwFTILEQkmcBqQsBUyCxEJJnAakLAVMgsRCSZwKbchAAAdtOEAID50oQAgPnShACA+Uq5CSWzIzATMgsRSSawmhAwFTILEUkmsJoQMBUyCxFJJrCaEDAVMgsRSSawmhAwFTILEUkmsJrQsS2LfLE6xkCrxWJ5jHH2dLR5b7d9j46w8fEO12qRZ1l2xKNz6ake61wNjLPfQ6NJ5s0H5iCZwGpCx7Ja5FlxxGvxapEXy824W69Eh2x0cMBTXO3KPRpw+c3vGPyyjn1sLj/VEc/W4NCrRXGiLpTMmw/MQTKBTbkJnciyyLLGmkF9KVmvJWRZUfSuLv1vlY9sxtn8tv3Nxij9jeZ5lmXFsjPOlml0BywnXb06yxerPYYqt1s/qZ5J5zA1N1lvZvO0zfZXizzLikV3u/2tdNWDL4tyzNUizxerZZEXRd56bW+/Wns9PPJ66N5Bbsx/s5X1FBrf2j7VgeMw8OT1d5ZF/QejWO6zU+cftJ1/VtvHZMSeCRCaJnQpA2syjVJRlYPOtaj/rfqRs/JSPnDx2WxtcKPVizrj7JhGPf3GnKuB9xqqeYGuHtl2zWyuclUNYv3VssgXy/UQA4eiv5Xtgze3st61uqN19qLxyM7L/LJo79rg/OsDUj1ywHHY9txlked5XUl6B+TAg7b9z2r3mJzyEzKA09KELq2zBNC9bp71LyON32++3IzRXJnotJLhNaGBjXbGGZ5GZ8D6O9UA1YLCzqGaL+w+0tPpKJuHmvu/2Ur3UPS3sn3w8qvy971jPTB+Y6+HRu/u2uD823VrZ73acRy2PHm1KBbL9RdlMWofkAMP2q4/q+1jsqPYAUROEzqWcjWg//fs3mVu55pQ40nn3ye0faP9bTXWD7oD9q+Vy6LfCwb26NAmNLQmtFkOWvYPxcWa0NlqkW9WUM52rwn1DF/vB5rQ8PzPLtyEzl0TKvdm3e3WXwwckIGdukgT2vFndTM1a0JAulJuQmF2pLUIUS6vDH0s1boto3FfRlZ/BrP1/pHtG+2Ns2sa3dc3Xpw37hPaPtSOJjRYyjYjbbtPaF0OFt3t9reya/Cz1geBjVtqGk2pNX5rr3cUsaGD3Jn/QBO60HEYqmlVYaqb00DL6Z2sfQ5af4/KM9v+k3C6+4SSefOBOUgmsJrQCXT/Qt1aEzrdhw67/l5/wb/z7/P0ZTHiru0evP/x47FGPsCFBgx40Ha+8KAVoXWTuuhLLr4dIIxkAqsJncCWD5+qmzCCTWP/717myae1LFpLaROeaSwOrutZ254vOWRLQAjJBFYTAkaRbbH7JSebHnBJyQRWEwJGsa0J7ahEMgsRSSawSTWhc995gYiEfkcBdkkmpFliTejT228O/op3pyBS+xQdmYV4JRNSTQgYxT4rPTILBKcJAaPY56MumQWC04SAUexzr4/MAsFpQkAwMgsEpwkBwcgsxCuZkGpCQDAyC/FKJqSaEBCMzEK8kgmpJgQEI7MQr2RCqgkBwcgsxCuZkGpCQDAyC/FKJqSaEBCMzEK8kgmpJgQEI7NAcJoQEIzMAsFpQkAwMgsEpwkBwcgsEJwmBAQjsxCvZEKqCQHByCzEK5mQakJAMDIL8UompJoQEIzMQrySCakmBAQjsxCvZEKqCQHByCzEK5mQakJAMDIL8UompJoQEIzMAsFpQkAwMgsEpwkBwcgsEJwmBAQjs0BwmhAQjMxCvJIJqSYEBCOzEK9kQqoJAcHILMQrmZBqQkAwMgvxSiakmhAQjMxCvJIJqSYEBCOzEK9kQqoJAcHILMQrmZBqQkAwMgsEpwkBwcgsEJwmBAQjs0BwmhAQjMxutVrkWUO+WF14iGVRv2r99WqxWJ7/3MNUIwwMtWP07VO6pItNoz2lPMuyfLHY/vT9Br/8QeU0NCEgGJndarXIi7oiLIusuHBhqC/Em6/aY2557hi2j75jSqecxkWftm/tWS2KlLtQMiHVhIBgZpPZaoWnWjfZrPVsasCyyPP2M4abUHecgaGq5xRFe5Vm83jZiXoTqB4vFt2t9KfXN7Am1J/J8GHJF6u66q0Web5YLYu8KPLWFnv7Xu/E0Og7prHrheX31nPYtum9Bz9p0zu5ZEKqCQHBzCSzq0W+uc6vL4zVZX991T87O1sWWXUd7V5Q68JSfbOuRr2h6udUY1aX7fKyXM+nMU6+WK5fOryVzvT6ek1oYCaDh6Z5ZKr/1i/ZzKE/q3NKxvZpnNdOylf2R2gdrv0GT/oTsmRCqgkBwcwks/3PtqqFnG5ZaV5jO2Wl+aqh5aX1A41tda/o3baxeah8WTnEwFb60xvayU4TGphJXz2V9Vfl7xuvWH85tO/VY7vWhIamsfOFveO244CcP/hBn2vGIpmQakJAMDPJbL1ysFrk+WLZvPqf34SG1nsaI3eG6mzrImtCq2p63YJwUBMamMngoWmWsry/jNRfExrY9EDb2GcawzVlx5rQxQe3JhQDTQgIZjaZbd9oUq8aFEV3CWSoCdXdpfmZWfm5VWeo+k6XRq1ofuLWHqd9n9B6Q4v+Vgam17vwb71PqJrJYJVrTqJ5I055n1D3/qestw/ZUH3bPo1zXthfSxs67HsN7j6hSGhCQDAyexojLEwsi94Hfntso/eqbUNceMa7Rx7jhfsNHs+K0Lq+XfQlI03mxDQhIBiZPZWRL8nLorF4c4wRYqoQW8V1j1DWFno6J6UJAcHILExEtkXoeZ2CJgQEI7MwEdua0BwqkSYEBLM7s0BEQr+dHC7ThIBQZBYmYp+Wk2pgNSEgGJmFidhnjSfVwGpCQDAyCxOxzydcqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCkVmISKqB1YSAYGQWIpJqYDUhIBiZhYikGlhNCAhGZiEiqQZWEwKCSS2zq0WeNeSL1YWHWBbrVx1hqGNZT2m1WCxHHP68h4asj1G+WGx/+uGDH6oefscRO+RgjjzvvaQW2JImBASTWmZXi7yor3DLIisOvt4dYajj2EyoPZ/TbPMITwvYhHYcsQMP5mpRBO5CqQW2pAkBwUw7s9WyzObStiw2CzSbq9iyyPP2M4brS3ecgaGq5xTFzibUG6peOsoXiyIvinzLt3fNuV536k+1XBDKN4/WnWy1yPPFarljo0OT7F/Jm4so/YOw9YXl99Zz2LbpAwevD1SxPO+Yd7ZUN8fuMS1PRP2teitFb5yhPzYnraNDph3Yw2WaEBDKlDO7WuSba/76+lNVgHUDODs7WxZZdU0d/EirLC/1RW79UG+o+jnNMfcYqnVprF7b+G7dgKpNt+fcHGFwqt2SV36x+e/QRndNsq+xCtY5COdd+DvlY9f8Lzx4o3vuPuZbmtB+a0LVn4TeOAP70npaGFMO7GVoQkAwU85s/wOpaiEn61zzBj7Sql9dv6rx9/vOUAPXun2Hqh5r3S5TreQ01pw2W+qtPdQj5Hlv/IHr+vqr8vfL7kbPmeT2NaGhC/7OF/bKx8CmDx58x5jDx3xrExrotI0mVM2lM87gH5uQn5KenZ1NO7CXkWlCQChTzmz9l/LVIs8Xy2YTOL8JDa33NEbuDNXZ1v5D1dZXzj3WhPqfGzVH6I4/tMKxWuR53lvEGlgTGppk/0LeX7bpDzHcAHasCV168B1jNl+YZf2VwgutCbUP3nnn2prQODQhIJhpZ7Z9o0a9EFAU3eWQ4ducyyLSXBQoP6LqDFXf9ZIPNKHtQzV+37pPqHv7UfM+od6nMI2Fh95Um7vWHKV5I872jQ5McjlQRLo34JQH4ZwX9pdhhg71gYNvH7N9xMpzWZ24zn0+g2Wo+lbzdHTG6e+L+4RGk2lCQCjHzez6ojHGPOMwzoLB0Ki9j8QuNN6BF/ODXxh88GMJvSKU7kVWEwKCOUpms7ZRJzxpY10o2+Mui9ZKR/ir81yEvkfo7Czdi6wmBARzmcxmW5xm5jBDqV5kNSEgmAMyu60AaUIwtlQvspoQEEwns+e2HCCsJC+ymSYEhJL1mtC5ET73nTrsHkHCUr3IakJAMAc0oeZrNSE4pVQvspoQEMxlmlBzEE0ITiDVi6wmBARzlCbUHE3SYTypXmQ1ISCY4zYhYFSpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUEwKC0YQgIqkmVBMCgtGEICKpJlQTAoLRhCAiqSZUE0rCssgXq/EHXy0Wy7G2spd9JrD7WBz7SC2LLMtGPPjnbj5frBqzGPUPwhg0IYhIqgnVhKK2WuRZMXY5qa6uq0VeLDdb3XrBHXNK5QR22kx3cJLHLwqBq0e9+fKr1aKIqQtpQhCRVBOqCcVpWWRZYzGiuWyTZ1mWZUXRvUQvizzPsywrluVzsu6LsixfLHrX1ka1qF/T/t3AlKoHsqoYdba7+7dnZ8siL4q8fqi5yd6TB3e8O8m6LdT7u9pjqPLQ1U+qDmbvMDcMjdM9YUN7fe5zhna211fjoAlBRFJNqCYUn4FVl8YlvrpUd1dElkVWrujUV8+sWHaunf0r8a5r7GYug1PaPFJur37OapGv61j7t51ZNXahMfXtu7B1x6stN45SNdm9hqq+qL5X7d32NaHBcTrHdnCvz33O4M4ONKgYaEIQkVQTqgnFabPeUl7Q69LSe6jxkuo5DZ3HdqwJ9RrE8JpQs1O1NtKY29nZ0G+7s2rsQV0Kyo7UefLwjncm2SwL5WvLtZ6dQ+1oh9trxz7j7Nzrrc8Z3NnWzsWzKKQJQURSTagmFLVlkXVXO+rWsqUJ9b/THi/rrOVc8D6hzZTq1tRYE2rObbntt82Rzl8T2ujv+MAk+61l6H7ngWN4UBMaHKe/TjYwpfOeM3iWrQkBY0s1oZpQElrLJ+Vix9YeUN8mk5WftjSWHMo1iGqEzv0qe6431MsuRZFX1/bmQtS235bbaNwnVJeq/pSz9uD9He8dgvb+9ofqHcN9mtBQweydi96xHdiRfZ4zsLPuEwLGlmpCNaFdo8V7KCJbGRg0wh5ccMg9nt4sSVsLyCnORf8TuChoQhCRVBOqCQ0M0jTqhMcU2RVxwCh7cKFB92pCWe/ztctt9BCN/59QRPcInZ1pQhCVVBOqCdWvHXSamcM8aUIQkVQTOvcmtK0AaUJwApoQRCTVhKbchM5tOcDUJPk+C2lINaFZ2k3o3HN27vty2D2CtB2QWSCUVBM69ybUfK0mBCemCUFEUk2oJjQwiCYEp6EJQURSTagmtGu0eA8FREETgoikmlBNCAhGZiEiqSZUEwKCkVmISKoJ1YSAYGQWIpJqQjUhIBiZhYikmlBNCAhGZiEiqSZUEwKCkVmISKoJTbwJ7RB6soDMQkw0oQikepIgVTILEUk1sJoQEIzMQkRSDWxqTcjSOkREZiEiqQY2qSYEAHAhmhAAMF+aEAAwXyk3oWR2BGZCZiEiyQRWEwKmQmYhIskEVhMCpkJmISLJBFYTAqZCZiEiyQRWEwKmQmYhIskEVhMCpkJmISLJBFYTAqZCZiEiyQQ25SYEALCbJgQAzJcmBADMlyYEAMxXyk0omR2BmZBZiEgygdWEgKmQWYhIMoHVhICpkFmISDKB1YSAqZBZiEgygU25CQEA7KYJAQDzpQkBAPOlCQEA86UJAQDzpQkBAPOlCQEA86UJAQDzpQkBAPOlCQEA86UJAQDzpQkBAPOlCQEA86UJAQDzpQkBAPOlCQEA86UJAQDzpQkBAPOlCQEA86UJAQDzpQkBAPOlCQEA8zXchAAAZqLbhAAA5kYTAgDm6/8D42VBjXsl710AAAAASUVORK5CYII='/>
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> This use case is an extension of the use case 'Read-out of multiple devices' in the XEP-0323
|
|
<link url='http://xmpp.org/extensions/xep-0323.html'>Internet of Things - Sensor Data</link>.
|
|
</p>
|
|
<p>
|
|
<strong>Note 2:</strong> If the server responds, but without specifying a list of nodes, the device can assume that all nodes available in the original request are allowed
|
|
to be read. If no nodes in the request are allowed to be read, the provisioning server must respond with a result='false', so the device can reject the read-out request.
|
|
</p>
|
|
<p>
|
|
The following example shows the communication first between the client and the device, then between the device and the provisioning server, and last between the device and the client:
|
|
</p>
|
|
|
|
<example caption='Restricting nodes during read-out'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='master@clayster.com/amr'
|
|
to='device@clayster.com'
|
|
id='5'>
|
|
<req xmlns='urn:xmpp:iot:sensordata' momentary='true' serviceToken='service0001' userToken='user0001' seqnr='2'>
|
|
<node nodeId='Device02'/>
|
|
<node nodeId='Device03'/>
|
|
</req>
|
|
</iq>
|
|
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='6'>
|
|
<canRead xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' momentary='true' serviceToken='service0001' userToken='user0001'>
|
|
<node nodeId='Device02'/>
|
|
<node nodeId='Device03'/>
|
|
</canRead>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='6'>
|
|
<canReadResponse xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' momentary='true' result='true'>
|
|
<node nodeId='Device02'/>
|
|
</canReadResponse>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='device@clayster.com'
|
|
to='master@clayster.com/amr'
|
|
id='5'>
|
|
<accepted xmlns='urn:xmpp:iot:sensordata' seqnr='2'/>
|
|
</iq>]]>
|
|
</example>
|
|
<p>
|
|
Note that the provisioning server responds with a <strong>canReadResponse</strong> element, similar to the <strong>canRead</strong> element in the request, except
|
|
only the nodes allowed to be read are read. The device must only permit read-out of nodes listed in the response from the provisioning server. Other nodes available
|
|
in the request should be ignored.
|
|
</p>
|
|
</section3>
|
|
<section3 topic='Restricting fields during read-out'>
|
|
<p>
|
|
In case the provisioning server wants to limit the fields a device can send to a client, the provisioning server has the possibility to grant read-out, but
|
|
list a set of fields the device is allowed to send to the corresponding client.
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwMAAAFuCAIAAABStVPZAAAfx0lEQVR4nO3dba8k1WEn8PpKnjFopr6IjUkggKnPsFLiDbvBQOyA+m2yxs7ywibWSMGL1FL2wSZhtZIjh4kJtkmaBw8kxoB5Gj8D0t0X3fVc3bdv364+dU79fhqJO327T52qmn/Xf07XcLMzAIC5ykJPAAAgGE0IAJivugllAACzMdCETl3DmAanHoC50YSoOfUAzI0mRM2pB2BuNCFqTj0Ac6MJUXPqAZibSzah1SLP8sWq/2CWZVmxPMYMu0MXy7OzZZH1N7vDssjKl7Umtc84jeccuPXLGjzIe73sQmdADQJghkZoQqtFnmVFMUJdWI988X61WuT5YjXQhE6y9Us7qAldcLZqEADztE8TKtd46mpTPpIXRe8iXV6CWysny2IzQnVt7j1SbaV80bLYFKrNs+pp1DWr+5zBuZVFaPua0GqRZ1meb5ayFuUI1Yvyxergrbe2leeNDQ4d0T0PcnX0su6erae7rGe7RxlSgwCYrT2aUO/DoHq5Yd0gWhfp+pv166rr9PYv6nWP1rcamym7UOvzqfo5zcLSmdvms7Fzm1A5YFmfBh45YOvNbTXq0jndbOdBrl9VjtRtQqv914TUIADm7GJrQvWlub5zZqAlNZQX5X5daj9SL3JUCx2NlrD5criLtBrAwNyqInROE2pXtH2b0Hlbb22rMY/OzvYWhfpDDa4RbUY9tAmpQQDM3D5NqNRcv9myXNG6/lbfHa4XrUcG7oXZd02o10Xac6s+GztREzp/IWdLEWwvpJ03VN2fyiNcv2zPJqQGAcAeTegCt7B0Lr/tD51aI/Qf6d2NNHAXzuZFnTt1Wmsh3bkt6yLUWYtp3Mu0VxM6ZOvDTWjLzmbZ5k6i8245au5Jo1xVr28e8m1lSA0CgLNJ//+EDvuXXu3icsp/7B5+6xcxlbMMAEEl14SGlrBOKOzW9zWVUwwAoU24CTEO5xcAKprQvDi5ANCkCc2IMwsAHZrQXDitANA33IRIT6A/YAAwaZk1IQBgtjQhAGC+NCEAYL40IQBgvjQhAGC+NCEAYL40IQBgvjQhAGC+NCEAYL40IQBgvjQhAGC+NCEAYL5GaUKn+qGicbjkwYQTCJ2SCQl9KuB8oVMyLUc5npsv+g9dZtCfvfJPP3vln9569YW3Xn3h56/d/PlrN99+/Z/ffv2f3/npD9/56Q/fvfXiu7de/MUb//Lemy+99+ZL7//7j97/9x998B8//uA/fvzhz37y4c9+8tFbL3/01su3f/6v61+/fPvffvn2v/3qndWv3ln9+t1Xfv3uK7/5xau/+cWrv33vtd++99rv3n/9d++//vsPfvrxh7c+/vDWJx+98clHb3x6+80p/DrKSYKxyazAEhGBPW5mNaEIThKMTWYFlogI7HEzqwmNfpKe+95z61+XPKowHpkVWCIisMfNrCYUwUmCscmswBIRgT1uZjWhCE4SjE1mBZaICOxxMxtvE3ry/urG8Xu/8bv3X//9t79w/dG///jDW5/cuPv6o/+w93F8/onHnpr4SYKxjZXZ7//xnY1/4nHt4e/u9cZ64+7rjz0f77sqjO2QwP7f/3RH8x9c/cFfXawJffuua4/8fTewF4rqOLmecxN68v7sylf+cXOSvnNvdu2R5+omdKG6evOh6/dpQszdiE3onq+Vb6zf/cod2QN/M+m/YgosUTiwCf3BX5aB/btHP/uZR/+fNaH6eG6+6D900pN0oSb09OevPfzd7kkaWBN6/onNX0ivPnHzzU9vv/npjbuv33l1/dD1x56vnjDeX0C9sRKFkzShV3/z9F3ZvV//7Xvf+4vNX06vPP7CrY8/vPXsH119/OYbn95+89ObD12/86GX6787NiPci7PAMldHa0Lf/Nydn/1MlmX3fet//flnN6tF9z/9yq/ffeWZe8rlhh986dod//lH1ZrQC396PSuT+Fg/qtmDNwavto01of63qpffd/eDdz70sia0TxN68eEr9z/dq6u9JvTyY1fLo/zUg9ndz95+89Mbd2fro7x+w71tTQjOzk7WhP7xS9fu/fpLX75y7ZHnfvf+67//4BtfzL7wPz689cmNu7M/+u/rzD54o37HfPmxq9k6njcfarxplnEWWObq8p+O3flf/u6jt16+/c3PZX/4327//F9/+Gefyf7wa796Z/Wrd752f/b5v333ld88fVd2z5O/fe+1l7585YFv15+O/fjRq1+80f10rI7qjqttowl1vlVfrKtvaUIXXxP6xne+PdCEnr2v+aHo1SduNj+nfOpBTQhKp1wTeubeVjAff+HWJx/9w+N33v1s4z10ndNn7yv/fjkYZ4Flri69JlQG9pufu/O//s91E7rvW+uL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'/>
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> If the server responds, but without specifying a list of field names, the device can assume that all fields available in the original request are allowed
|
|
to be sent. If no fields in the request are allowed to be sent, the provisioning server must respond with a result='false', so the device can reject the read-out request.
|
|
</p>
|
|
<p>
|
|
The following example shows the communication first between the client and the device, then between the device and the provisioning server, and last between the device and the client:
|
|
</p>
|
|
|
|
<example caption='Restricting fields during read-out'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='master@clayster.com/amr'
|
|
to='device@clayster.com'
|
|
id='7'>
|
|
<req xmlns='urn:xmpp:iot:sensordata' momentary='true' serviceToken='service0001' userToken='user0001' seqnr='3'/>
|
|
</iq>
|
|
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='8'>
|
|
<canRead xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' momentary='true' serviceToken='service0001' userToken='user0001'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='8'>
|
|
<canReadResponse xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' momentary='true' result='true'>
|
|
<field name='Energy'/>
|
|
<field name='Power'/>
|
|
</canReadResponse>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='device@clayster.com'
|
|
to='master@clayster.com/amr'
|
|
id='7'>
|
|
<accepted xmlns='urn:xmpp:iot:sensordata' seqnr='3'/>
|
|
</iq>]]>
|
|
</example>
|
|
<p>
|
|
Note that the provisioning server responds with a <strong>canReadResponse</strong> element, similar to the <strong>canRead</strong> element in the request, except only
|
|
the fields allowed to be sent are listed. The client must only send fields having field names in this list.
|
|
</p>
|
|
<p>
|
|
Also note, that the provisioning server can return a list of both allowed nodes and allowed field names in the response. In this case, the device must only send allowed fields
|
|
from allowed nodes, and ignore all other fields and/or nodes.
|
|
</p>
|
|
</section3>
|
|
</section2>
|
|
<section2 topic='Device Control'>
|
|
<section3 topic='Rejecting control actions'>
|
|
<p>
|
|
An important use case for provisioning in sensor networks is who gets to control devices, and what they can control. This use case details how communication with a
|
|
provisioning server can help the device determine if a client has sufficient access rights to perform control actions on the device.
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAwMAAAFECAIAAAD0gnWJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAACB9SURBVHhe7d19jCPnQcfxMQpvBaUUCkKg0OTO3qSu/2mhVWurzTVNc9hL6CakKxAo26itnYQ0XhKupLCg/nFA4Ghqh5DUbsKxBQRyQ7ul7LqXNM2F6tyqqPQf17lb+/JCRIWgQDnxTqTlefPM2DP2ene9u555vh+dcvP6zPPM5tnnt8/4dhJbW1sOAACAlb7N/A0AAGAfkhAAALCX93QskUjoBQAAgNjTEWggCfGZoajjiwgAwCTcEZOnYwAAwF4kIQAAYC+SEAAAsBdJCAAA2Gt3SahXzSVy1Z5ZE5qlxIBS0+wYJA8bsWsEcSV5gjxx4IL7ylx0vN1Waf9aJO47H5cGAGBHpjgnlK10xUAsdCvZ+snQQT5f29qq5c3KBHrVpeWWXJAnnisn1cb95l50P+xbi4hBAADswpgkJCd+tP7cRX9L7lRHrY/Q7Zgg4ZbQL2BgTiiwV+9X1EEmNdQLiVKpP4OiSpBr7lFerUqloZmq4QIHtphDhwscvmhOFO5eWRu6hsu7Yd4hgxUIa9E0iPKJQQAA7IaaxZH8y9JG0TfNI3UrWccpbvSXBvbJg33co/RBcq/a5C6M3+suuJeUW9TRcsE7SGzarlaDBboL7vUDBQ5e1Bw94sSBq7m8Pe5Z7sJA4eGn75SopFkCAACTcUfP0XNC+ROVbGs55U1oSNl0Svw3Ob8oxvNhalyXA7w5Sk4N6QIKdcdpbw7OfwT39jbb5sxtHqIVF4b2jahVsEBvi5OcyzitTlcuBgv0mF0jThxiJoVkg/T6pC3aPXE5/eUEAAC7MObpWLJ8ToUlEW7qayYK6QjQW2+Y518B+VpXBqilas9JpfuzPtLwZ2KCe72IIRPFTp4cjahVsEC1pbEuS/ZlmwlMcmKzlFrO9CeAlN23aDLEIAAA9mh0EnI/9VKoZysn8jIZrVay9YLYstTJhMwJGcnyStGRWcgRxztmUimYAmRpQ3vztY2iKj+17FRWZXKSUUJ9qmZNnRNmXK2CBcoteiZKppbwTyyHXnSCE/MLIjLKq51sZ00AmqRF8pNE6gYEF8YSpRKDAADYI280PYiRVYzxBWdjus+JZJntSleEE2/J7Io1khAAALvmDqMHmIRkUKnLTwtP+QMzvWouZf7Ze9aWHEQMAgBgLw4jCWFK+EoBALBH7mA6xd+siINADAIAYIpIQlFCDAIAYLpIQpFBDAIAYOq8wVUMtHoBs4kYBADAtLjzCwNJiLEWAADYwI09PB0DAAD2IgkBAAB7kYQAAIC9SEIAAMBeJCEAAGAvkhAAALAXSQgAANiLJAQAAOxFEgIAAPYiCQEAAHuRhAAAgL2m+d4x3uHqx0vcMPvosy46LGYfHdZv733WjT1TTkLf6H1VL4z/79Bq6H+HVsf8d2hV/PfQXXb5FXxjxewT/YU+K9BhEQmis9Bhtan0WdEWXQhPxwAAgL1IQvvlmbPP6D9mHcAMo8MC0TLFPksSAgAA9iIJAQAAe0UuCZ2969VHv/sHjog/3/VLZ+WGJ3/12kdeUAsfetvDamEiLzz48NNmEcB0Pf9H1/1Q6nt+MCn+vOLVR6/72Itm+3hP3PfWHXRhABN44Y9v+NH0q340/X0/8lrx55Un/tpsn9DnxQgb6L876qpR6NfRSkLP3PXqP7jmKxf/65+fE38+49x2zP8d9p2//dd3XmmWt3XxqU9eMIsApu/WR//jn3riz39+8ws3f+a6uz5vNo9zw/1fnLwLA5jQL9T+9e873/rGs9/6xpnfPv/Iw8+bzRO5/reeueM1Ztm1o64ahX4dqST01JOdk7931xGzdvyjz5+93fcV8uaEXnjw+isuu1z8WXjwotogMun1C2rLFSqcvvBg6cNfOn0rP4AC++81d937c49tnHWcFx86ftV3ff9V3/mqm3//Obnjc+WbHlQLzsXH3nr9Yz3vZ0d/Fw50ZwB79IXfuP6nfvbyH7767i+8+PD83Pf+UEr8+cBTcs8T97z7Id0rnz997Pjpi+6c0HN/+LZX/ti3v/LHZE98ONhVr7jjCbVheLT1zQkFd7mnl++7Q3wHUJsORZSS0MXeZjoZCKcBvYeXP3nzF1++9NLLl8rPvv6+ptr4JefG82LL1z7sfOqpnnPl3bUPv+W2T/ADKHAQjiTfLPrvx+59/Kaz//0vz//Pv37g2Td86HOO85M/dc29VfmQunfms5kPvjepD1Zd+J7XfUJ24a/deM/r3xrszgB24E9K/adjxz994/13XiW3feW1d176hwvLvQ/+ymsf/fd/7P77Pz7q/OyKCDM3FK7+4EPykycXz6y/7sRtR+WxUu/MX73u8b/7v3/7u5cvrd3d76teV730CeeW0NF2wNAub7Cedz5uDjkcUUpCR5NznZ7/geXZM2FT7t0LX/3SfW9VwfPWjzvnu+rnyLfc/A75tTt6JCPXAByg53pfFt/1Nv/2y796TM0J3faoc6Erfu58Z+kjnSeaztMfue+an77BHCuILvz++bfLpaPv/extTrA7A9gB7+nYs08WzWzCm1Jm4bbC29TfV17zxk3ZK69//+8++/kzztmP/trVP3292qMk7/iAc0t/TsgXcExXda567Zu2H22HdnUvOO8+ruYjbjj+frXlsETq6dg73ple+WUzcec4Z37ptnetqw9ND0pd/eNvuV//ECn+rN3tZloAh+DFhz7yZ+8tHEvOveHNv6XnhF7432996gPyMfeVhZvO/2X5TPv+2/P6WEV04XZPTZ5ffOzG0w7dGdg/pzf0Z6hfOP83cynZK1+Tf9eFz97z5Nd/s3hc7eh7+yP/puaEHr/mnvv+1GxznI+v63979PyzX7kmtcPumbra+eQZ/eDsDHNCk7v2oW/+4vk3mX879i7n9H9/9JjZ45O8s/LuT+kfIsWf0dPpp2+9rMw/HwP2xyfe1/+3Y9edv/fiQ9c7R2//yC2f1nNCV37H98mnY0LyJ29snz5vfi7s87rw6z/7wNe+OFF3BrBzR4q/+zvPvk99Tuh9zp+f1DOzR2+Y//rqhZ85PvBZlN4jN3+7/pzQLecfuP/n9UbRVR/4+q2qb97qPH6//+eZSXg9fd053Dkh3ju2L8SX9uzTZr7q2mPX6gVg1oj+Qp8V6LCIBNFZ4tRhew8v3OZU5Ad2n7jvsvXjL1f1g7aJTKXPirbw3jEAAHA4kneWM/pTgLecf+DuHcSgqSMJAQCAg/f2R2bjI4AkIQAAYC+SEAAAsBdJCAAA2IskBACA7Z6417wy+RWvfvdDO3o3WfSRhAAAsNtTv36T85h6ZfLF//zK/F/ccdqqX+dOEgIAwG5Hjr752edN+jnynqc/p984Jt+arH4VqnlrsvPkh/pvUe2/EVm/Pnn0i8/Nm1lnG0kIAAC7XfWepx5yioNPxy5+7J7HbzqrXo9j3posfOl1Zfnv3h+/5p4HvdcnO6EvPldHPuJ7peDMIgkBAGC9I+95Sj8d++Yvnv+JXzsjUs4F+dZkNSf0nkedC5tqWugtV6t32d9w+wNfP+O+Pjn8xef6yCggCQEAYLXnaovvqL1oVpyrrnmj/Ct5tXxrspoTevF/v/Wpu+X7WV1XFm72Xp8c9Refk4QAALDakVLjVzbf0f+3Y9ed/+XfPO44R29/4JZP6zmh17hvTXYlj3uvT570xeezijew7gvxfwMvdMTsE/2FPivQYREJorPQYbWp9FnRFt7ACgAAbEcSAgAA9iIJAQAAe5GEAACAvUhCAADAXiQhAABgL5IQAACwF0kIAADYiyQEAADsRRICAAD2IgkBAAB7kYQAAIC9SEIAAMBeJCEAAGAvkhAAALAXSQgAANiLJAQAAOxFEgIAAPYiCQEAAHuRhAAAgL1IQgAAwF4kIQAAYK/E1taWWUp4y7sjSjBLcJyzT5/VC9ceu1YvALOGPuuiw2L20WH99t5n3dgzzSTkeubsM2bpMBx7+zH3Bs0CvrFi9tFnXXRYzD46rN/ekxBPxwAAgL1IQgAAwF778nTscMWmIYAl6LNAhMQvLTAnBAAA7EUSAgAA9iIJAQAAe8UwCfGBAyBa6LNAhMSvwzInBAAA7EUSAgAA9iIJAQAAe8UwCSV4MwsQKfRZIELi12GZEwIAAPYiCQEAAHuRhAAAgL1IQgAAwF4kIQAAYC+SEAAAsFcMkxC/uR+IFvosECG8bQMAACA+SEIAAMBeJCEAAGCvGCYhfnM/EC30WSBCeNsGAABAfJCEoqxZylV7ZnmXetVq0yzu1fiidF1HH7P3toSUMIUbNG07u+Ez2AAAiBmSUBT1qrlESYyn+dq5ctJs253eeqOj/hYljhxz+5cbb2xRzdLJ9Go52T9mX+z9bhyAHd6BfG3VOUUWAoB9RBKKlGYpIS05q1u1vH/GQMYPqVQankTo70nIeOKu6IN61aXlVr0gVpLlc1urzpK3Sxm63O6Laq61F+eT3jH+sgYzltpeqg4WrlqaG9oUEHI31tTqUM3NNo84Udy2wd2m6W71+hUQqyG7zOnibLOz36iRdymwy3cJt/VyV3I+3Ti1bQwFAOwWSSgy5Mi5trAlDc99iAG2sdiVexacutlm9NYbmQ110ta5+fX+YVsrnZQYrJPl1Uq2uGGKkxFGkClG7AtebtdFmSDkO0YmAlPWhlPoxwanW83J1NVNNwYLl1qO2tStOI31YJjxC94Nf81Dp41a7fSq3LuRWVapo1kqOOqEbqV90gSVVmZFbKg5Ybv06eLslLplG8X6mizGq0ngLgV2qXLUJU44A7VNzmXam+NbDADYPZJQZMh0sbCmpgrc6GB0O63MnBrh8wtFtcWVLK84BXVSIrfUaLWWU2q5UHcCw6uZpDAzQMHL7bqoUMUFvSOVzprTW8uF5ZZcEM0JFp6VWUpUYi4j18YJ3g1/zU14GWQKlyeoy+VrIqDJw1O6RlI2nZJ/he4yp/dbJdqk1kIbooW3UV0iWNtWpyv/AgDsgxgmIfGjtFmKn3xNTRXIhOJPQ16a6G221RYfc87WRqbVcrIVPQ8hDMyOyOgic8vg9uHL7aGoAD1r4s8tssDuYmOp6qSzowqfRNjd8GquJ32GtMw8U3OtLisjmmCmw7oVnWlcY3YFiZqMasiYXcHamhAWX6KtZgnAzItfh2VOKIrkSOmfa0mWz6101ATDUsNs6jOzM0KhXemKoKHnIYR+lKoXxKKcARoZOczldl9UfiHjPtIyx6xW2nreo+Bs+Joidiw2Cp3FkMKHiNqEz+/oMgbuxkDNFzaDJ2YzHfXBJlOZ5FxGVFNa6mScgQmZMbuCvJpIQ3cpbJcyUNsTeRHnTFQEAOyDhBvuxDdefjKLvmYpt3lix9Mo+24fqtUslZzaqGdv4wROnNF7ps105UKJ7yTiv3wzATDj3NjDnBAOQr620lkKn8LZrfyuYpCw6xMPgfzo9kqUYpBLzmkpZh0AZlUM54Ri0xAgikalnzG9kj4LREj80gJzQgAOgvimo5l1AJgNXrIT36EimvL43grECfNDwCyLbloY4jYkJkno5UsvmZVBl11+Bd9VgYO07U8mokvSZ4Hoim5aGOI2hKdjAA6C+I6jmXUAmA0kIQD7yMQfAhCAWUUSAjB9Jv4QgADMPJIQgGkiAAHxFr8OThICAAD2IgkBAAB7kYQAAIC9SEIAAGBS2/7OsMghCQEAAHuRhAAAgL1IQgAAwF4kIQAAYC+SEAAAsBdJCAAA2IskBAAAJsXbNgAAAOKDJAQAAOxFEgIAAPYiCQEAgEnxtg0AAID4IAkBAAB7kYQAAIC9SEIAAMBeJCEAAGAvkhAAALAXSQgAAEyKt20AAADEB0kIAADYiyQEAADsRRICAACT4m0bAAAA8UESAgAA9iIJAQAAe5GEAACAvUhCAADAXiQhAABgL5IQAMyIZinRV2qabdvrVavbHdws5ao9s2xWRp81cPCuuCWEFDW69B0dfGgmuNs+M9iAveNtGwCA/SBi0Ml0V4wy0oZTmHQI7a03OmZxEs3SyfRqObnDs3YmXztXTg4sTGJHBx+WHd63fG3VORW/LBQ3JCEAmLpeNafndkyecWd7zFxPs5TLDR2x1q6IhKL2yhF0S8UCt5xRJ/aqS8utuopN/V2lZuAsj7jM4nzSd1bwEobaXqoONSSk5kHuTIi74F6ltKZWw4w52Ktj2DXFiaWSPsDdPeqGi9WQXeZ0cbbZ2b8V7oV1waH3rX9N9xLuPZO7kvPpxqnhrwJmC0kIAKZMDpiZDTm3012Uw2CzVHD0aqV90oybLWdRTgB1K05jXY6rm+3M3PCMiFeOnCQyo/PgicnyaiVb3NCzKa3MithzYjPkLEMHId9ZoZdwnG41t+SsbnXTjYa62tbWSicVWoGJiKuYchacutk2UvDg3nrD1FHnw4BWO70q925kllXqCL3h6ubUnLBd+nRxdmptQS4U62uyGK8mpvkD9y3kzuj77wzUNjmXaW9OeJ9wOEhCADBl3U6ruJCXS8nyuVreyddEypBzBKnlljpAyMpEIg6Yy6jVwHjZbKrR1ZTjpNJZs3/oRL9sOqUXgmeNETy4tVzQFRUNaS2n1PRGoe5sX4FRRDkm5+UXimrLGMGDk+UVff98kz4DTJXkCaqSoTdc35wxXwtB3wtxJ9RaaPO18DujLhGsbavTlX/FhWiYWYoLkhAATJmXKXrVXK7arObUVIOch9BDbIj8QmZ5yR3mm6VCQU1L6MkJfzyYxI7OCh6crXTlbNZS1Uln5bIRPh8zCd8N2WyrLWOEHZyv6Sr0J32GtMzsVHOtLpsg7vqoGz5mV5Coyajmj9kVrK2bUDGbSEIAMGXJ8upiQ00YpBqLq+X8XKauJwmWOhln1PyAGD5XOnqWIZGQT3Bqefkwpq3PFBtqeuomhCjd9xBs3Fkib7mPtNRZIw9WbSh0Fk1DJN81/FTa60e4cN4NWWqYTaPPCh4sjpWrQqFdWdgMnpjNdJbUbkc1ITn6ho/ZFeTVROo3v3/fRt2ZgdqeyIc+98RMSYjYapYS3nK0iJq/fOklszLossuviGijgBijzx6iZim3eWL3szthmqWSU/MnromuEThrUru73GGZ6coJojOK/+6o00U3LQxxG0ISAnDQ6LOHap/H5mYpUagX5ZSW2bDvZjhsiJuxtnCAt2LnRGc0S8okvS+6aWGI2xCSEICDRp8FZoTojGZp0JhuGN20MMRtCJ8TAgAAA0RK0Mx6rDEnBOCgje+zZglAFER3kHVjD0kIwEGjzwIzQnRGszSC6I9x7bBu7OHpGAAAGCAigmbWY40kBAAAJBN/LJuXJQkBAGA1E39sfTBNEgIAwFI2ByAXSQgAANiLJAQAAOxFEgIAAPYiCQEAAHuRhAAAgL1IQgAAwF4kIQAAYC+SEAAAsBdJCAAA2IskBAAA7EUSAgAA9iIJAQAAe5GEAACAvUhCAADAXiQhAABgL5IQAACwF0kIAADYiyQEAADsRRICAAD2IgkBAAB7kYQAAIC9SEIAAMBeJCEAAGAvkhAAALAXSQgAANiLJAQAAOxFEgIAAPYiCQEAAHuRhAAAgL1IQgAAwF4kIQAAYC+SEAAAsBdJCAAA2IskBAAA7EUSAgAA9iIJAUBUNEuJvlLTbNter1rd7uBmKVftyYVeNWcuoJith8Kt0654Z49pvm5t2GUmu/jeqohZQRICgEgQMehkurulbTiFSQfh3nqjYxYnUtww1xBXySyfmjxxTVWzdDK9Wk6atT0Y1/xux6l0t87t+jL52qpziiwUeSQhADh47tyLyTPubI+Z62mWcrmhI9baFS8a5Gt6APfmcEac2KsuLbfqKjb1d5WagbO2MVxb32Vz1WopVyrp1eDukc3xl9ALlC9buzgv2hdS5xF1MFvFCf0yJK/53uGKKrBQby2n1PHD99/lv0pIPZPz6cZhhUVMC0kIAA6aHJ8zauqluygH0map4OjVSvukGWRbzqKcAOpWnMa62NLbbGfmhucuvHLkJJEZxAdPTJZXK9nihp73aGVWxJ4TmyFneeoFPdoLola1vLxKQxW5tbXSScnje+sNU4DIY3NOq51elctmCmmCWg2UML8+XL4bhOSJ/TqPr8MIXvOT5XP6aK2WFxs2itlKV+wLu//aNvUUF5jLtDf9ZyB6SEIAcNC6nVZxIS+XxHAsska+JiKDjB6p5ZY6QMjqKCBGWrUaGHGbTTUUm3KcVDpr9g+d6JdNp/RC8CyPeTq2URRLom6qtq3llKxeolB35PHJ8oqur5wd2exf0ckvFE1p29bKX8JSY7h8P13nbeuwrcCckNkuhd1/bZJ6tjpds4RoIgkBwEHzAoIYn3PVZjW3tqDiR7eSVQeEyC9klpfc+YpmqVBYk4N5Xf1XRYXgnNFIE5yVr3XTJ9VTIFHbbEXPhQh6dilf02sbmeXlektN88iZnLopbaLy+yW0Wk6g/GHb10HHkd5mW/4VIjAnZLYL4osw+v5vX083XyKiSEIAcNCS5dXFhppdSDUWV8v5uYx5JLXUyTijZhjEkLzS0VMS6rmVesCzWmnrM/WDrBFE6b45kEnP0rUsNb3aSurJlDu/UmhXKsVsprOkVhxV2iTlD5TQ7Q6VL2OfSVfGNnXobhT1HVxqmBP8BpsflBx9/7eppzgg7KkloiUhkq1ZSnjL0SJq/vKll8zKoMsuvyKijQJibLp9VpQm/ktPPzTNUm7zRPhMzh7sT6lTF5Fq7k1cB1k39jAnBCCSxHcxzawjXvK1lY73MHBGyU9ar8Q8BtmAOSEAB20vfXZU9KGnA/skroOsG3uYEwIQAeJ7lmbWAWBKmBMCcNCG+qzop2YJwEyK95wQSQjAQQsmoW27sDhFbxmFng7sk7gOsm7s4ekYgAgQ37A0sw4AU0ISAhAlJhARiQBMCUkIQCSZQEQkArA3JCEA0UYeArAXJCEAAGAvkhAAALAXSQgAANiLJAQAAOxFEgIAAPYiCQEAAHuRhAAAgL1IQgAAwF4kIQAAYC+SEAAAsBdJCAAA2IskBAAA7EUSAgAA9iIJAQAAe5GEAACAvUhCAADAXiQhAABgL5IQAACwF0kIAADYiyQEAADsRRICAAD2IgkBAAB7kYQAAIC9SEIAAMBeJCEAAGAvkhAAALAXSQgAANiLJAQAAOxFEgIAAPYiCc2kZilX7Znl2dWrVpv671zCZ7aqvrdb6Z3db2zQUPMTpRHHHY5o/K8EAIeHJDRT5KAqB9J87Vw5abbtD3mlkUNkvxrj9dYbHbPoFDe2+jYyy6cOIwuEtqhZOplencat9Dc2yNf8ra1a3mydCfnaqnOKLAQAI5GEZkOzpKYTlpxVNZD6pyL0hEOpFPjZvr/LHf/FWTm5SR6rF5ruMf1k0z/m1Ny5rVVnSe7xlTtUDe9scczQ5XrVpeVWvTBcKU+gev7SqqWcqKRZGd49VFXBHDOuPk6yHGxRc629OC9ykHtnvBsSvKyqldnqfQEUr7He4crIvLiTr0VYIYF67qjAqq9RveR8unEo2RQAIoEkdPjkgLa2oKYThmeCxAjcWOzKPQtO3WwzvF1bK52UGQpbmRWxXlswCyc2l5YzerpiwykMHiOCjswOgowPYl+wGr31hjl769z8+tDlkuXVSra4YQ6tF8zIm0gUnA1ReLB6/tLKc06rnV6Vy2YKSWaNYFUdVUS34jTWRR4YWx9lsEVuEBLcGzK+ViN4jTVX6DPzP77mu7lmZ1+LQXv84p5wfI1KOsm5THvTl+sAAD4kocMnB9eFtYFRtK/baWXm1FCeXyiqLS6xq7WcUmcV6o4Z6bLplNrpLRQX9DCbSmeHj1HZRzAzQMFqJMsrjhnic0uNkMt5zOOhjaJYUgN7sHr+0qqbTtZkFNEwU1pIVfUxYiSXaxPUZ7BFfrrV29ZqW948jGLulP/pWP/CO/taDNrjF3egUWp7q9OVfwEAAkhCsyFfU6OoTCL+NOQNcb3NttriEruyFT1tIAxPJrnqa7o4L1NpckSXgWHw3OFqmPWtjUyr5UxwuXytmz6pBt+w6nmlLS/XW2qaR87b1E3FRlXVZ1x9wls0aPta6cQQuNuu8DmhyUzQQGOPX9yBRqkHY6MiFwCAJDRT5ADmH1zFuLvSUXMDSw2zqS9ZXl1s6GkDYXgySZMPddp6ckA/s/LIEX3kCGuq4c1/FNqVbjfkcvXC8JV1tUrNYPUGSqsUs5mO+kyPqdiYqrrG1yekRfmFjMlbxja16m4U9XOuwN2Wgo11+Z+OuZ/sGTSugaISgycF6xk0psCBRp3Ii1y3TfICAIslxM+NZinhLUeLqPnLl14yK4Muu/yKnTZKlCb+O3u3olnKbZ4YmV2i5qBaE5G71iyVnFp4/Nu7WbwHQ31W9NMpdmEA0zXdQXZ2uLGHOSFD3BHNrCMW8rWVzlLoHM1Mye9bDBI5qOCsxCVAA8A+sH1OaFT0iW7IBWbfUJ9lTgiYZXsZZGeZG3ssnRMS7dfMOgAAsFIM54RERDVLACKCOSFgZg0Nsn7xmBOKZxLa9msmTtFbRonulxaYfbvoswAOy1CH9YtHErL06ZhovGbWAQCAlWz/t2MmEBGJAACwEv+K3jCBiEgEAIBNSELDyEMAANiDJAQAAOxFEgIAAPYiCQEAAHuRhAAAgL1IQgAAwF7x/B3TZikM/y4MOHT0WSBCYv87pmOYhPz4Vf3ADKLPAhES+yTE0zEAAGCvmMwJmaUw/HwJzBr6LBAhce2wbuyJQxICAADYETf2xPDp2Pj0CmDW0GeBCIlfh+VzQgAAwF4kIQAAYC+SEAAAsBdJCAAA2IskBAAA7EUSAgAA9ophEuK3IgHRQp8FIiR+HZY5IQAAYC+SEAAAsBdJCAAA2CuGSYjf3A9EC30WiBDetgEAABAfJCEAAGAvkhAAALAXSQgAANgrhkmI39IGRAt9FogQfrMiAABAfJCEAACAvUhCAADAXiQhAABgL5IQAACwF0kIAADYiyQEAADsRRICAAD2IgkBAAB7kYQAAIC9SEIAAMBeJCEAAGAvkhAAALAXSQgAANiLJAQAAOxFEgIAAPYiCQEAAHuRhAAAgL1IQgAAwF4kIQAAYC+SEAAAsFdia2vLLCUSegEAACD2dATykhAAAIBteDoGAABs5Tj/D8SWau0xAosnAAAAAElFTkSuQmCC'/>
|
|
<!-- sensor-network-provisioning-15.png-->
|
|
</p>
|
|
<p>
|
|
The following example shows the communication first between the client and the device, then between the device and the provisioning server, and last between the device and the client:
|
|
</p>
|
|
<example caption='Rejecting control action'>
|
|
<![CDATA[
|
|
<iq type='set'
|
|
from='master@clayster.com/amr'
|
|
to='device@clayster.com'
|
|
id='18'>
|
|
<set xmlns='urn:xmpp:iot:control' xml:lang='en'>
|
|
<boolean name='Output' value='true'/>
|
|
</set>
|
|
</iq>
|
|
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='1'>
|
|
<canControl xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' serviceToken='service0001' userToken='user0001'>
|
|
<parameter name='Output'/>
|
|
</canControl>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='1'>
|
|
<canControlResponse xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' result='false'/>
|
|
</iq>
|
|
|
|
<iq type='error'
|
|
from='device@clayster.com'
|
|
to='master@clayster.com/amr'
|
|
id='18'>
|
|
<setResponse xmlns='urn:xmpp:iot:control' responseCode='InsufficientPrivileges'/>
|
|
</iq>]]>
|
|
</example>
|
|
</section3>
|
|
<section3 topic='Restricting nodes during control'>
|
|
<p>
|
|
In case the device handles multiple nodes that can be read, the provisioning server has the possibility to grant control access, but to limit the nodes that can be controlled.
|
|
The provisioning server does this by returning the list of nodes that can be controlled.
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
<!-- sensor-network-provisioning-14.png-->
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> If the server responds, but without specifying a list of nodes, the device can assume that all nodes available in the original request are allowed
|
|
to be controlled. If no nodes in the request are allowed to be controlled, the provisioning server must respond with a result='false', so the device can reject the read-out request.
|
|
The same is true for parameters: If the provisioning server does not specify parameters in the response, the caller can assume all parameters are allowed.
|
|
</p>
|
|
<p>
|
|
The following example shows the communication first between the client and the device, then between the device and the provisioning server, and last between the device and the client:
|
|
</p>
|
|
<example caption='Restricting nodes during control'>
|
|
<![CDATA[
|
|
<iq type='set'
|
|
from='master@clayster.com/amr'
|
|
to='concentrator@clayster.com'
|
|
id='19'>
|
|
<set xmlns='urn:xmpp:iot:control' xml:lang='en'>
|
|
<node nodeId='DigitalOutput1'/>
|
|
<node nodeId='DigitalOutput2'/>
|
|
<node nodeId='DigitalOutput3'/>
|
|
<node nodeId='DigitalOutput4'/>
|
|
<boolean name='Output' value='true'/>
|
|
</set>
|
|
</iq>
|
|
|
|
<iq type='get'
|
|
from='concentrator@clayster.com/plc'
|
|
to='provisioning@clayster.com'
|
|
id='2'>
|
|
<canControl xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' serviceToken='service0001' userToken='user0001'>
|
|
<node nodeId='DigitalOutput1'/>
|
|
<node nodeId='DigitalOutput2'/>
|
|
<node nodeId='DigitalOutput3'/>
|
|
<node nodeId='DigitalOutput4'/>
|
|
<parameter name='Output'/>
|
|
</canControl>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='concentrator@clayster.com/plc'
|
|
id='2'>
|
|
<canControlResponse xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' result='true'>
|
|
<node nodeId='DigitalOutput2'/>
|
|
<node nodeId='DigitalOutput3'/>
|
|
</canControlResponse>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='concentrator@clayster.com'
|
|
to='master@clayster.com/amr'
|
|
id='19'>
|
|
<setResponse xmlns='urn:xmpp:iot:control' responseCode='OK'>
|
|
<node nodeId='DigitalOutput2'/>
|
|
<node nodeId='DigitalOutput3'/>
|
|
</setResponse>
|
|
</iq>]]>
|
|
</example>
|
|
<p>
|
|
Note that the provisioning server responds with a <strong>canControlResponse</strong> element, similar to the <strong>canControl</strong> element in the request, except
|
|
only the nodes allowed to be controlled are included. The device must only permit control of nodes listed in the response from the provisioning server. Other nodes available
|
|
in the request should be ignored.
|
|
</p>
|
|
<p>
|
|
Also note, that the restricted set of nodes and/or parameters returned from the provisioning server must be returned to the original caller, so it can
|
|
act on the information that only a partial control action was allowed and taken.
|
|
</p>
|
|
</section3>
|
|
<section3 topic='Restricting parameters during control'>
|
|
<p>
|
|
In case the provisioning server wants to limit the control parameters a client can control in a device, the provisioning server has the possibility to grant
|
|
control access, but list a set of parameters the client is allowed to control in the corresponding device.
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
<!-- sensor-network-provisioning-14.png-->
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> If the server responds, but without specifying a list of nodes, the device can assume that all nodes available in the original request are allowed
|
|
to be controlled. If no nodes in the request are allowed to be controlled, the provisioning server must respond with a result='false', so the device can reject the read-out request.
|
|
The same is true for parameters: If the provisioning server does not specify parameters in the response, the caller can assume all parameters are allowed.
|
|
</p>
|
|
<p>
|
|
The following example shows the communication first between the client and the device, then between the device and the provisioning server, and last between the device and the client:
|
|
</p>
|
|
<example caption='Restricting parameters during control'>
|
|
<![CDATA[
|
|
<iq type='set'
|
|
from='master@clayster.com/amr'
|
|
to='plc@clayster.com'
|
|
id='20'>
|
|
<set xmlns='urn:xmpp:iot:control' xml:lang='en'>
|
|
<boolean name='DigitalOutput1' value='true'/>
|
|
<boolean name='DigitalOutput2' value='true'/>
|
|
<boolean name='DigitalOutput3' value='true'/>
|
|
<boolean name='DigitalOutput4' value='true'/>
|
|
<int name='AnalogOutput1' value='65535'/>
|
|
<int name='AnalogOutput2' value='65535'/>
|
|
<int name='AnalogOutput3' value='65535'/>
|
|
<int name='AnalogOutput4' value='65535'/>
|
|
</set>
|
|
</iq>
|
|
|
|
<iq type='get'
|
|
from='plc@clayster.com/plc'
|
|
to='provisioning@clayster.com'
|
|
id='3'>
|
|
<canControl xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' serviceToken='service0001' userToken='user0001'>
|
|
<parameter name='DigitalOutput1'/>
|
|
<parameter name='DigitalOutput2'/>
|
|
<parameter name='DigitalOutput3'/>
|
|
<parameter name='DigitalOutput4'/>
|
|
<parameter name='AnalogOutput1'/>
|
|
<parameter name='AnalogOutput2'/>
|
|
<parameter name='AnalogOutput3'/>
|
|
<parameter name='AnalogOutput4'/>
|
|
</canControl>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='plc@clayster.com/plc'
|
|
id='3'>
|
|
<canControlResponse xmlns='urn:xmpp:iot:provisioning' jid='master@clayster.com' result='true'>
|
|
<parameter name='DigitalOutput1'/>
|
|
<parameter name='DigitalOutput2'/>
|
|
<parameter name='DigitalOutput3'/>
|
|
<parameter name='DigitalOutput4'/>
|
|
</canControlResponse>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='plc@clayster.com'
|
|
to='master@clayster.com/amr'
|
|
id='20'>
|
|
<setResponse xmlns='urn:xmpp:iot:control' responseCode='OK'>
|
|
<parameter name='DigitalOutput1'/>
|
|
<parameter name='DigitalOutput2'/>
|
|
<parameter name='DigitalOutput3'/>
|
|
<parameter name='DigitalOutput4'/>
|
|
</setResponse>
|
|
</iq>]]>
|
|
</example>
|
|
<p>
|
|
Note that the provisioning server responds with a <strong>canControlResponse</strong> element, similar to the <strong>canControl</strong> element in the request, except only
|
|
the parameters allowed to be sent are listed. The device must only control parameters included in this list.
|
|
</p>
|
|
<p>
|
|
Also note, that the provisioning server can return a list of both allowed nodes and allowed parameter names in the response back to the client, so it can
|
|
act on the information that only a partial control action was allowed and taken.
|
|
</p>
|
|
</section3>
|
|
</section2>
|
|
<section2 topic='Cache'>
|
|
<section3 topic='Clear cache'>
|
|
<p>
|
|
When the provisioning server updates access rights and user privileges in the system, it will send a <strong>clearCache</strong> command to corresponding devices.
|
|
If a device was offline during the change, the provisioning server must send the <strong>clearCache</strong> message when the device comes online again. To acknowledge
|
|
the receipt of the command, the client responds with a <strong>clearCacheResponse</strong> element. This response message does not contain any information on what was
|
|
done by the client. It simply acknowledges the receipt of the command, to make sure the provisioning server does not resend the clear cache command again.
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> The <strong>clearCache</strong> command does not include information on what has been changed, so the device needs to clear the entire cache. This
|
|
to avoid complexities in making sure updates made to the provisioning rules works in all cases, and to minimize complexity in the implementation of the protocol on the sensor side.
|
|
It is also not deemed to decrease network performance, since changing provisioning rules for a device is an exceptional event and therefore does not affect performance during
|
|
normal operation.
|
|
</p>
|
|
|
|
<example caption='Clear cache'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='provisioning@clayster.com/provisioning'
|
|
to='device@clayster.com'
|
|
id='17'>
|
|
<clearCache xmlns='urn:xmpp:iot:provisioning'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='device@clayster.com'
|
|
to='provisioning@clayster.com/provisioning'
|
|
id='17'>
|
|
<clearCacheResponse xmlns='urn:xmpp:iot:provisioning'/>
|
|
</iq>]]>
|
|
</example>
|
|
</section3>
|
|
</section2>
|
|
<section2 topic='Services'>
|
|
<section3 topic='Getting a service token' anchor='servicetoken'>
|
|
<p>
|
|
A service requesting provisioning assistance, needs to retrieve a service token from the provisioning server. The following example shows how this can be done.
|
|
</p>
|
|
<example caption='Requesting a service token'>
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='service@clayster.com/service'
|
|
to='provisioning@clayster.com'
|
|
id='14'>
|
|
<getToken xmlns='urn:xmpp:iot:provisioning' serviceId='WatchamacallitService1'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='service@clayster.com/service'
|
|
id='14'>
|
|
<getTokenResponse xmlns='urn:xmpp:iot:provisioning' token='service0001'/>
|
|
</iq>]]>
|
|
</example>
|
|
</section3>
|
|
<section3 topic='User access to service' anchor='usertoken'>
|
|
<p>
|
|
Provisioning in sensor networks also requires control of user access to different services in the network. This use case shows how service access rights are controlled using
|
|
a trusted provisioning server.
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<p>
|
|
First, the user connects to the service in some way. This can be done using XMPP, HTTP, HTTPS or some other means. The service need to extract some form of identifying
|
|
credentials from the user, and provide that to the provisioning server. The provisioning server determines if the client has access rights to the service based on these
|
|
credentials, and also provides the service with a <strong>userToken</strong> that the service can use in further communication with the provisioning server regarding
|
|
the user and its privileges.
|
|
</p>
|
|
<p>
|
|
The following table lists some different types of credentials that the service can extract from the client:
|
|
</p>
|
|
<table caption='User Credentials'>
|
|
<tr>
|
|
<th>Type</th>
|
|
<th>Protocols</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td>JID</td>
|
|
<td>XMPP</td>
|
|
<td>Allows provisioning to be done on the JID the user has.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>IP Address</td>
|
|
<td>HTTP, HTTPS</td>
|
|
<td>Allows provisioning to be done on IP address or IP-ranges for instance.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Host Name</td>
|
|
<td>HTTP, HTTPS with DNS</td>
|
|
<td>If the service has access to the client host name, for instance in an intra network, this can be used for provisioning.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>X.509 Certificate</td>
|
|
<td>HTTPS</td>
|
|
<td>If the client provides a client certificate, such a certificate can be used to provide provisioning.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>X.509 Certificate Thumbprint</td>
|
|
<td>HTTPS</td>
|
|
<td>
|
|
The client can also choose to validate the certificate itself and only send the certificate thumbprint to the provisioning server. Even though this
|
|
provides somewhat lesser security than providing the entire certificate, it might be an option to distribute certificate validation checks across the network
|
|
to lower the work load on the provisioning server.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>User Name</td>
|
|
<td>HTTP, HTTPS, XMPP</td>
|
|
<td>
|
|
If authenticated HTTP(S) access is implemented, the service can provide the user name as credentials. XMPP based clients can use
|
|
information in the roster to provide user name information to the provisioning server.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Geolocation</td>
|
|
<td>HTML5 over HTTP(S), XMPP</td>
|
|
<td>
|
|
If the geographic location (longitude, latitude and possibly altitude) of the user client is known, it can be used. HTML 5 provides mechanism whereby the location
|
|
of the client can be fetched. &xep0080; provides a mechanism whereby client location can be obtained over XMPP.
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>SSO Token</td>
|
|
<td>Intranet</td>
|
|
<td>If a single sign on token is available, such a token could be provided as credentials.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Protocol</td>
|
|
<td>Any</td>
|
|
<td>Connection protocol used to connect to the service.</td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
The provisioning server receives these credentials, and decides if the user should have access to the service or not, based on rules configured in the provisioning service.
|
|
If the user is granted access, a <strong>userToken</strong> is generated and returned to the service.
|
|
</p>
|
|
<p>
|
|
Now, the service can determine if this access grant is sufficient or not. It can require the user to login into the service first. If so, the service should provide the provisioning
|
|
server with the user name used during login, when logged in.
|
|
</p>
|
|
<example caption='User access to service'>
|
|
<![CDATA[
|
|
<!-- user connects to service -->
|
|
|
|
<iq type='get'
|
|
from='service@clayster.com/service'
|
|
to='provisioning@clayster.com'
|
|
id='9'>
|
|
<canAccess xmlns='urn:xmpp:iot:provisioning' serviceToken='service0001'>
|
|
<credentials type='IpAddress' value='10.0.0.1'/>
|
|
<credentials type='Longitude' value='123.45'/>
|
|
<credentials type='Latitude' value='67.89'/>
|
|
</canAccess>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='service@clayster.com/service'
|
|
id='9'>
|
|
<canAccessResponse xmlns='urn:xmpp:iot:provisioning' userToken='user0001' result='true'/>
|
|
</iq>
|
|
|
|
<!-- user performs login into service -->
|
|
|
|
<message from='service@clayster.com/service'
|
|
to='provisioning@clayster.com'>
|
|
<userLoggedIn xmlns='urn:xmpp:iot:provisioning' serviceToken='service0001' userToken='user0001' userName='Kermit' />
|
|
</message>
|
|
|
|
<!-- user continues interacting with service -->]]>
|
|
</example>
|
|
</section3>
|
|
</section2>
|
|
<section2 topic='User privileges'>
|
|
<section3 topic='User privileges in service'>
|
|
<p>
|
|
When a user has been given access to a service, and properly been identified, the service can ask the provisioning service for detailed user privileges to control
|
|
different aspects of the service. This can be done using the <strong>hasPrivilege</strong> command. Here, the service sends its <strong>serviceToken</strong> and
|
|
the <strong>userToken</strong> earlier received when being granted access to the service. Furthermore a <strong>privilegeId</strong> has to be provided.
|
|
</p>
|
|
<p>
|
|
A <strong>Privilege ID</strong> is a string composed of one or a sequence of parts, delimited by period characters. The Privilege IDs form a tree of privileges,
|
|
using an invisible, but common, root privilege.
|
|
</p>
|
|
<p>
|
|
The following table suggests some examples of Privilege IDs, with suggestive descriptions. (Only used as an example.)
|
|
</p>
|
|
<table caption='Privilege ID examples'>
|
|
<tr>
|
|
<th>Privilege ID</th>
|
|
<th>Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Databases.Energy.Select</td>
|
|
<td>Gives the user the rights to select data from the Energy database.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Databases.Energy.Insert</td>
|
|
<td>Gives the user the rights to insert data into the Energy database.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Databases.Energy.Delete</td>
|
|
<td>Gives the user the rights to delete data from the Energy database.</td>
|
|
</tr>
|
|
</table>
|
|
<p>
|
|
<strong>Note:</strong> Note that privilege IDs are local to the service. Different services are allowed to use similar or same Privilege IDs, in different contexts and
|
|
with different meanings. The provisioning server must separate Privilege IDs from different services.
|
|
</p>
|
|
<p>
|
|
The client must always provide full Privilege IDs to the provisioning server. The provisioning server however, can grant partial privilege IDs, pointing to parent
|
|
privilege nodes to a user or a role object, granting a user a specific role. If granting a parent privilege ID to a user or role, this is interpreted as
|
|
giving the corresponding user or role the privileges of the entire sub-tree defined by the parent privilege ID.
|
|
</p>
|
|
<p>
|
|
If additional control over privileges is desired, negative privileges can be assigned to the user or role. Granted or explicitly rejected privileges are specified in a
|
|
sequential list of full or partial privilege IDs. This list is then processed sequentially to determine if a privilege is granted or not.
|
|
</p>
|
|
<p>
|
|
Example: Consider the privileges above. Give a user or its corresponding role the following privileges in a sequential list:
|
|
</p>
|
|
<ul>
|
|
<li>Exclude: Databases.Energy.Delete</li>
|
|
<li>Include: Databases.Energy</li>
|
|
</ul>
|
|
<p>
|
|
This would give the user rights to select and insert data, but not to delete data from the Energy database.
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> Care should be taken when constructing Privilege IDs, so they do not include variable data that potentially can create an infinite amount of
|
|
privilege IDs. For example: Do not include user names, sensor IDs, etc., in privilege IDs, as the number of such entities cannot be estimated or is scalable beforehand.
|
|
</p>
|
|
<p>
|
|
The following diagram shows an example of how a service asks permission from a provisioning server before an action is taken:
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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QumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKIMZFSg60sQumURfKI8Z1azOqqo54trryLedPea97Us1lznb3ESw22sgilUxbJI8Z3ajGrm/nmu3lTdb47UlsW118tZo26uCs12MoilE5ZJI8Y38BmnXBV3+bNasVwVQHnTV1vb7G/LO7uZ8+uNts0TbN5tPXm23vl4iI32MoilE5ZJI8YX9tiVq+q3LKsbdYJF7N6WePmTbVe+6s3X3Q/hl5XxXatcHlTb1ftNpt97n4cbW1xS2qwlUUonbJIHjG+tv6HyJvlwF6faz8xrjerju36457LGHd21Xms9a62y+I1Ps/OlhpsZRFKpyySR4yvrV3tW8zqejbf9MDOyuJwWdy3atjZ886udh7LyuKlUoOtLELplEXyiPENbF9ruFkMrJumXn2afKgsth9kdz+cXn8MvbOrzTZ1Xbtm8QipwVYWoXTKInnEeLz2fSA9Rcte3b8xMtjKIpROWSSPGI/Z8u9ZnPr1itW2zY2RwVYWoXTKInnEmLGrBkQGW1mE0imL5BFjxm6oLA61xlEHW1mE0imL5DkcY5iCc78Lr6BSFqFwlbJIHDFm7C7tgknjWlmE0imL5BFjxu5AR8wb18oilC51+jBlYszY7f1MOXVcK4tQutTpw5SJMWO397rD1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYtRI/O8AAAyVSURBVEyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlYkyk1HGtLELpUqcPUybGREod18oilC51+jBlk4jxYlZXHfVsceVdzJvlvU6wq1NZH9JN772YzeYDGx340S0d1smkjmtlEUqXOn2YsknEeDGrm7b0zJuquXYFOsGuTuOmnWxz/+1ntOXAjw5ZzJrz18XUca0sQulSpw9TNsIYbxb3Vm1n3qyW+VbFZt7U9fYW+xve7n727GqzTdMcLIu9XbULkPVs1tRNUw/8+NAxt6uX/UNdd731HZv5ZcewurVzx9lis1H3MdYH1v6ofZSmt599L+M1S+ZJpY5rZRFKlzp9mLLRxXgxq1cNa1lJNot7i1m9rkHVptjt/ex43e/a3rO8qberdpvuPo/Y1VZb2ty389O2JG4eevuYu3vYe6jbu7z8GAbK4nEri5tXprefPce2tdnZpI5rZRFKlzp9mLLRxbj/ye9mObDaqUF7Pjtu793eq7MqtrOrPfXn2F1tbuuu6q320qln667VP+bOHur+ZZKdrXYe77JjGCyLe2pwpyzuPNzmq70v4zk/nl9LHdfKIpQudfowZaOLcbuUtZjV9Wy+KV6dlcXhsrhv1bCz551d7TzW8btqLcvUESuLvbK4tYfd/ffa2+XH0Ft/vdLK4s5C5iXP3crirVEWoXSp04cpG2GMty+Sa5fPmqYeKF7bfWjd1bpLaevPgnd2tdmmrveUxeFddb7fumZx91LI7jWLvY93O8t1vUPtLxAePobF+rltnsjONYd7++LmR93D29lP/2V0zeJtUhahdKnThyk7bYyXleE2jnPEbmeZrYDFuyFFHFrquFYWoXSp04cpO0mMq223esDjc1vdqYhO1lfA9YoXF7njWlmE0qVOH6bsJjGuBtzNkcMBqeNaWYTSpU4fpuwaMR7qiMoi5Ugd18oilC51+jBl/VRDpIxxXSmLULhKWSTONVJ96Vn5vM8ILnLHtbIIpUudPkzZTVKtLFKs1HGtLELpUqcPU3aSVCuLlCZ1XCuLULrU6cOUnTbVyiKFSB3XyiKULnX6MGVSTaTUYCuLULrU6cOUSTWRUoOtLELpUqcPUybVREoNtrIIpUudPkyZVBMpNdjKIpQudfowZVJNpNRgK4tQutTpw5RJNZFSg60sQulSpw9TJtVESg22sgilS50+TJlUEyk12MoilC51+jBlUk2k1GAri1C61OnDlEk1kVKDrSxC6VKnD1Mm1URKDbayCKVLnT5MmVQTKTXYyiKULnX6MGVSTaTUYCuLULrU6cOUSTWRUoOtLELpUqcPUybVREoNtrIIpUudPkyZVBMpNdjKIpQudfowZVJNpNRgK4tQutTpw5RJNZFSg60sQulSpw9TJtVESg22sgilS50+J7KY1VVV1bNZU88W+zeZ93+056Z9tw9tdm2L2Wx+1fuc/CBKINVESg22sgilS50+J3JElTq6LPZuPXVPW8zq5spl8eJiMWvS6qJUEyk12MoilC51+pzCclmxqurZou116xur9Q39HzXN6qbNtlu76G3W2W5V9uZNXe88zO7jtvdZ3XF1Qz1bbO7ePsJF79Grtqhes2QWTKqJlBpsZRFKlzp9TmTdseZt/Wvr17La9X80b5ZNbKuEHdysLYnrfVbbW+953L7N4202me+Wxf37ifsoWqqJlBpsZRFKlzp9TmS3LM6b7nJePVts/ahXvjabt1c99jfrdMp1l+uVvP7j9lYWt8ri5vEv3c/FxaH+OVJSTaTUYCuLULrU6XMiB1YWdzdpf9TfaN5sqll/s70ri8MrgsP2lcXVnvesUO55CjGkmkipwVYWoXSp0+dEdsvi9rWCO8Vuc41j3bbAdg2vd9XgerP91ywOXmvYbrVruUkz37p7NfhYm/24ZhFGITXYyiKU7lanz7KS3MZhj1Gp63elHtcNpJ5TmbjUYCuLULrbmD7Vtls9/lEpsZbFXa94cZF7TmXiUoOtLELpTjh9qgF380RgI/WcysSlBltZhNLdfPoMdURlkXNJPacycanBVhahdIenz6VFEEbB9CZApSyWL+a3Al2Hp88xsb/0PH3eJ8gEpZ5TmbjUYCuLULqbl8XurpRFSpB6TmXiUoOtLELpTlgWu/tUFjmj1HMqE5cabGURSncbZbG7c+8O7l7qOZWJSw22sgilu9WyCGchxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayCKVTFskjxkRKDbayOEmLWV216tni4uLiYt6svjjsyM2GH6668v13Hncxm827t86ufkTjoiySR4yJlBpsZXGSFrO6mXe+qdrvLnW9sth5gHlzlYfrP25nb+vbFrMmuS4qi+QRYyKlBltZnKTt9raqb902tlkDnDV109QDC5DzZrXdcmdtC1zM6m6j3F8WNw/TrhhuPe7q1vXjrf692qieLbYXG+vrFNCRUBbJI8ZESg22sjhJO91q+W27TNf54bxpS+Ky420a2qYbbqrh+p671W3nY+j1Nm0drJp573EHymJnu+4a5zXWO8dDWSSPGBMpNdjK4iQdXllsVwy3rgdc/XzfymK11eN6y3ztDe3iY3vf9v57H/fYsnitz7bHQVkkjxgTKTXYyuIk7b1msb84tyxvAyuL7T46i4SLWV3X9e5+ug+33njnk+o9j7uzbGllUVkkiBgTKTXYyuIkbX8uvFnr27TAdsGvc83izmaddcCmactg+7n11sN1lv3W5bR7EDvf17PFeu+b7rlzSeV2vXXNotgzLmJMpNRgK4uH9jbel+Jkrrxid6dLfL2PqDMpi+QRYyKlBltZ3LOTrls94BG4Ug2bN+0C5B1Z/j2LwdcrXlwoiyQSYyKlBltZbO+7190cORygLJJHjImUGuypl8WhjqgsUg5lkTxiTKTUYCeXxUuLIGTIGEZMShV6TmXiUoNdZZfFS39Jl56Gz/uM4MLKIonEmEipwZ56WezeV1mkTMoiecSYSKnBVhb37ERZpCjKInnEmEipwVYWD+1tvC8FSZRF8ogxkVKDrSxC6ZRF8ogxkVKDrSxC6ZRF8ogxkVKDrSxC6ZRF8ogxkVKDrSxC6ZRF8ogxkVKDrSxC6ZRF8ogxkVKDrSxC6ZRF8ogxkVKDHV4WDzj3wcKxrhRsOWcUjGsipQa7Ci6L463w0CXY5JFqIqUGW1mE0gk2eaSaSKnBTiuLGeu90CXY5JFqIqUGO6oswhR4h5JHqokUE2xlEQCAQcoiAACDkstizBMBADgXZREAgEHKIoyMYJNHqokUE2xlEUZGsMkj1USKCbayCCMj2OSRaiLFBFtZhJERbPJINZFigq0swsgINnmkmkgxwU4uixDJO5Q8Uk2kmGArizAy3qHkkWoixQRbWQQAYJCyCADAoOSyGPNEAADORVkEAGCQsggjI9jkkWoixQRbWYSREWzySDWRYoKtLMLICDZ5pJpIMcFWFmFkBJs8Uk2kmGArizAygk0eqSZSTLCTyyJE8g4lj1QTKSbYyiKMjHcoeaSaSDHBVhYBABikLAIAMCi5LMY8EQCAc1EWAQAYpCzCyAg2eaSaSDHBVhZhZASbPFJNpJhgK4swMoJNHqkmUkywlUUYGcEmj1QTKSbYyiKMjGCTR6qJFBPs5LIIkbxDySPVRIoJtrIII+MdSh6pJlJMsJVFAAAGKYsAAAxSFgEAGKQsAgAwSFkEAGCQsggAwCBlEQCAQcoiAACDlEUAAAYpiwAADFIWAQAYpCwCADBIWQQAYJCyCADAIGURAIBByiIAAIOURQAABimLAAAMUhYBABikLAIAMEhZBABgkLIIAMCg/WURAACWdssiAADsUBYBABj0/wE2Iy2NMoX+6AAAAABJRU5ErkJggg=='/>
|
|
</p>
|
|
<example caption='User privileges in service'>
|
|
<![CDATA[
|
|
<!-- user wants to perform action -->
|
|
|
|
<iq type='get'
|
|
from='service@clayster.com/service'
|
|
to='provisioning@clayster.com'
|
|
id='10'>
|
|
<hasPrivilege xmlns='urn:xmpp:iot:provisioning' serviceToken='service0001' userToken='user0001' privilegeId='Sensors.View'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='service@clayster.com/service'
|
|
id='10'>
|
|
<hasPrivilegeResponse xmlns='urn:xmpp:iot:provisioning' result='true'/>
|
|
</iq>
|
|
|
|
<!-- user performs action -->]]>
|
|
</example>
|
|
</section3>
|
|
<section3 topic='Download all user privileges'>
|
|
<p>
|
|
To improve performance, services can download the entire set of user privileges, and perform privilege checks internally. The following diagram displays
|
|
how the above two use cases could be handled in such a case:
|
|
</p>
|
|
<p>
|
|
<img src='data:image/png;base64,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'/>
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> When downloading privileges using this command, a sequential list of full or partial privilege IDs will be returned together with the
|
|
corresponding include or exclude flags. The above mentioned algorithm of determining user privileges must be implemented by the service, if this method is
|
|
to be used.
|
|
</p>
|
|
<example caption='Download all user privileges'>
|
|
<![CDATA[
|
|
<!-- user connects to service -->
|
|
|
|
<iq type='get'
|
|
from='service@clayster.com/service'
|
|
to='provisioning@clayster.com'
|
|
id='11'>
|
|
<canAccess xmlns='urn:xmpp:iot:provisioning' serviceToken='service0001'>
|
|
<credentials type='IpAddress' value='10.0.0.1'/>
|
|
<credentials type='Longitude' value='123.45'/>
|
|
<credentials type='Latitude' value='67.89'/>
|
|
</canAccess>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='service@clayster.com/service'
|
|
id='11'>
|
|
<canAccessResponse xmlns='urn:xmpp:iot:provisioning' userToken='user0001' result='true'/>
|
|
</iq>
|
|
|
|
<!-- user performs login into service -->
|
|
|
|
<message from='service@clayster.com/service'
|
|
to='provisioning@clayster.com'>
|
|
<userLoggedIn xmlns='urn:xmpp:iot:provisioning' serviceToken='service0001' userToken='user0001' userName='Kermit' />
|
|
</message>
|
|
|
|
<iq type='get'
|
|
from='service@clayster.com/service'
|
|
to='provisioning@clayster.com'
|
|
id='12'>
|
|
<downloadPrivileges xmlns='urn:xmpp:iot:provisioning' serviceToken='service0001' userToken='user0001'/>
|
|
</iq>
|
|
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='service@clayster.com/service'
|
|
id='12'>
|
|
<downloadPrivilegesResponse>
|
|
<exclude id='Sensors.Delete'/>
|
|
<include id='Sensors'/>
|
|
</downloadPrivilegesResponse>
|
|
</iq>
|
|
|
|
<!-- user performs actions without interaction with the provisioning server -->]]>
|
|
</example>
|
|
<p>
|
|
<strong>Note:</strong> If the user or service has not been correctly identified, logged in, etc., the resulting list must only include privileges
|
|
that default users that are not logged in can have. This list can be empty.
|
|
</p>
|
|
</section3>
|
|
</section2>
|
|
</section1>
|
|
<section1 topic='Determining Support' anchor='support'>
|
|
<p>If an entity supports the protocol specified herein, it MUST advertise that fact by returning a feature of "urn:xmpp:iot:provisioning" in response to &xep0030; information requests.</p>
|
|
<example caption="Service discovery information request">
|
|
<![CDATA[
|
|
<iq type='get'
|
|
from='device@clayster.com/device'
|
|
to='provisioning@clayster.com'
|
|
id='disco1'>
|
|
<query xmlns='http://jabber.org/protocol/disco#info'/>
|
|
</iq>]]>
|
|
</example>
|
|
<example caption="Service discovery information response">
|
|
<![CDATA[
|
|
<iq type='result'
|
|
from='provisioning@clayster.com'
|
|
to='device@clayster.com/device'
|
|
id='disco1'>
|
|
<query xmlns='http://jabber.org/protocol/disco#info'>
|
|
...
|
|
<feature var='urn:xmpp:iot:provisioning'/>
|
|
...
|
|
</query>
|
|
</iq>]]>
|
|
</example>
|
|
<p>
|
|
In order for an application to determine whether an entity supports this protocol, where possible it SHOULD use the dynamic, presence-based profile of service discovery defined
|
|
in &xep0115;. However, if an application has not received entity capabilities information from an entity, it SHOULD use explicit service discovery instead.
|
|
</p>
|
|
</section1>
|
|
<section1 topic='Implementation Notes' anchor='impl'>
|
|
<section2 topic='Caching and cache time' anchor='cache'>
|
|
<p>
|
|
To minimize network traffic, and optimize response time, devices should cache access rights and user privileges provided by the provisioning server. If memory is limited,
|
|
items in the cache should be ordered by last access, and items with the oldest last access timestamp should be removed first. A safety valve can optionally be implemented as well,
|
|
removing unused cache items after a certain age, even if memory is available.
|
|
</p>
|
|
<p>
|
|
The device can assume that access rights and user privileges on the provisioning server do not change over time, unless the provisioning server says so.
|
|
</p>
|
|
<p>
|
|
The provisioning server on the other hand, must keep track of when a device is online and offline, and clear the cache of the device if changes are made that affects the device.
|
|
If the device was offline when those changes occurred, the provisioning server must send the clear cache command as soon as the device comes online again.
|
|
</p>
|
|
<p>
|
|
When creating a new trust relationship, the device should always clear its cache, if it contains information from before.
|
|
</p>
|
|
<p>
|
|
To minimize stress of the provisioning server during synchronous sensor start up, for instance after a power failure, all clients should aim to persist its cache if possible. Clients
|
|
not persisting its cache may produce too much stress on the provisioning server on start-up, practically removing it from the network.
|
|
</p>
|
|
</section2>
|
|
<section2 topic='Working with multiple provisioning servers'>
|
|
<p>
|
|
When working with multiple provisioning servers, there are some things that should be considered:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
When a device requests information from the provisioning servers, this can be done in a parallel fashion. Even though the provisioning servers
|
|
were added in a sequential fashion, there is no order or priority between the servers.
|
|
</li>
|
|
<li>
|
|
When receiving different responses from different servers, with regards to access rights, privileges, relationships, etc.,
|
|
the union of rights, or the most forgiving or most accepting response should be used. If one of the servers grant a privilege, the privilege is assumed
|
|
to exist. If one of the servers grant a friendship request, the friendship request should be granted, etc. Most probably, different servers will manage
|
|
different subsets of entities on the network, and when they receive questions about unrecognized devices, they will simply deny access.
|
|
</li>
|
|
<li>
|
|
If a provisioning server requires total control of the network, it should not allow secondary trust relationships. However, if such a server enters a network
|
|
and there exist previous provisioning servers (i.e. they accept secondary trust relationships), more trust relationships are assumed to be acceptable.
|
|
</li>
|
|
<li>
|
|
Even though examples in this document only list a secondary trust relationship, there is no such limit. There may exist many different trust relationships in a network
|
|
or for a given device.
|
|
</li>
|
|
</ul>
|
|
</section2>
|
|
<section2 topic='Automatic aggregation of services, users and privileges'>
|
|
<p>
|
|
One important design consideration when implementing a provisioning server is how to handle new services, users and privileges. One option might be to automatically
|
|
ignore anything not recognized. Another option might be to dynamically add new services, user names and privileges to internal data sources, making it easier to manage
|
|
new types of services dynamically. However, adding such items automatically might also make such data sources grow beyond control.
|
|
</p>
|
|
</section2>
|
|
<section2 topic='Reading devices from large subsystems'>
|
|
<p>
|
|
All examples in this document have been simplified examples where a few devices containing a few fields have been read. However, in many cases large subsystems with
|
|
very many sensors containing many fields have to be read, as is documented in <link url='http://xmpp.org/extensions/xep-0326.html'>Internet of Things - Concentrators</link>
|
|
<link url='http://xmpp.org/extensions/xep-0326.html'>Internet of Things - Concentrators</link>. In such cases, a node may have to be specified using two or perhaps
|
|
even three ID's: a <strong>sourceId</strong> identifying the data source controlling the device, a possible <strong>cacheType</strong> narrowing down the search to
|
|
a specific kind of node, and the common <strong>nodeId</strong>. For more information about this, see
|
|
<link url='http://xmpp.org/extensions/xep-0326.html'>Internet of Things - Concentrators</link>.
|
|
</p>
|
|
<p>
|
|
<strong>Note:</strong> For cases where the <strong>nodeId</strong> is sufficient to uniquely identify the node, it is sufficient to provide this attribute in the request.
|
|
If there is ambiguity in the request, the receptor must treat the request as a request with a set of nodes, all with the corresponding <strong>nodeId</strong> as requested.
|
|
</p>
|
|
</section2>
|
|
<section2 topic='Different types of tokens'>
|
|
<p>
|
|
A small note regarding the use of different tokens. A service can get a <strong>Service Token</strong>, a device a <strong>Device Token</strong> and a user
|
|
a <strong>User Token</strong>. When delegating these tokens to third parties, a service sends its <strong>Service Token</strong>. But, if the service does this
|
|
within the context of a user action, the service sends both its <strong>Service Token</strong> and the users <strong>User Token</strong>. The same with a device.
|
|
If a device delegates its token to a third party, it sends its <strong>Device Token</strong>. But if the device performs the action in the context of a user action,
|
|
the device sends both its <strong>Device Token</strong> as well as its <strong>User Token</strong>.
|
|
</p>
|
|
</section2>
|
|
</section1>
|
|
<section1 topic='Security Considerations' anchor='security'>
|
|
<p>
|
|
Delegating trust to a third party may create a weak link in the overall security of a sensor network. Therefore, it's vitally important that the following be adhered to:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
Trust should only be delegated in a secure way. Once delegated, it should be able to lock this trust so it cannot be changed without reverting the device to
|
|
factory default settings. Such a locked delegation mode can be likened with a production mode, where vital configuration parameters should not be able to be changed.
|
|
</li>
|
|
<li>
|
|
If allowing installation using a LED, as above, make sure the LED does not light up for a long time, limiting the window of access where the sensor can be linked to a
|
|
provisioning server.
|
|
</li>
|
|
<li>
|
|
Provisioning servers should be monitored during operation, since it provides a vital link in the operation of the network.
|
|
</li>
|
|
<li>
|
|
Multiple provisioning servers could be allowed, for redundancy or for scalability. This specification does not limit the number of provisioning servers used in a network,
|
|
not used by a device. Examples in this specification use only one provisioning server for simplicity.
|
|
</li>
|
|
<li>
|
|
Generally, take care what kind of provisioning servers you allow in a network.
|
|
</li>
|
|
</ul>
|
|
</section1>
|
|
<section1 topic='IANA Considerations' anchor='iana'>
|
|
<p>This document requires no interaction with &IANA;.</p>
|
|
</section1>
|
|
<section1 topic='XMPP Registrar Considerations' anchor='registrar'>
|
|
<p>
|
|
The <link url="#schema">protocol schema</link> needs to be added to the list of <link url="http://xmpp.org/resources/schemas/">XMPP protocol schemas</link>.
|
|
</p>
|
|
</section1>
|
|
<section1 topic='XML Schema' anchor='schema'>
|
|
<code>
|
|
<![CDATA[
|
|
<?xml version='1.0' encoding='UTF-8'?>
|
|
<xs:schema
|
|
xmlns:xs='http://www.w3.org/2001/XMLSchema'
|
|
targetNamespace='urn:xmpp:iot:provisioning'
|
|
xmlns='urn:xmpp:iot:provisioning'
|
|
xmlns:sn='urn:xmpp:iot:sensordata'
|
|
elementFormDefault='qualified'>
|
|
|
|
<xs:import namespace='urn:xmpp:iot:sensordata'/>
|
|
|
|
<xs:element name='getToken' type='GetToken'/>
|
|
<xs:element name='getTokenResponse' type='GetTokenResponse'/>
|
|
|
|
<xs:element name='isFriend' type='Friend'/>
|
|
<xs:element name='isFriendResponse' type='FriendResponse'/>
|
|
<xs:element name='unfriend' type='Friend'/>
|
|
<xs:element name='Friend' type='Friend'/>
|
|
|
|
<xs:element name='canRead' type='CanRead'/>
|
|
<xs:element name='canReadResponse' type='CanReadResponse'/>
|
|
|
|
<xs:element name='canControl' type='CanControl'/>
|
|
<xs:element name='canControlResponse' type='CanControlResponse'/>
|
|
|
|
<xs:element name='clearCache'>
|
|
<xs:complexType/>
|
|
</xs:element>
|
|
|
|
<xs:element name='clearCacheResponse'>
|
|
<xs:complexType/>
|
|
</xs:element>
|
|
|
|
<xs:element name='canAccess'>
|
|
<xs:complexType>
|
|
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
|
<xs:element name='jid' type='JidCredential'/>
|
|
<xs:element name='ip4' type='Ip4Credential'/>
|
|
<xs:element name='ip6' type='Ip6Credential'/>
|
|
<xs:element name='hostName' type='HostNameCredential'/>
|
|
<xs:element name='x509Certificate' type='X509CertificateCredential'/>
|
|
<xs:element name='x509CertificateThumbprint' type='X509CertificateThumbprintCredential'/>
|
|
<xs:element name='userName' type='UserNameCredential'/>
|
|
<xs:element name='longitude' type='LongitudeCredential'/>
|
|
<xs:element name='latitude' type='LatitudeCredential'/>
|
|
<xs:element name='altitude' type='AltitudeCredential'/>
|
|
<xs:element name='sso' type='SsoCredential'/>
|
|
<xs:element name='protocol' type='ProtocolCredential'/>
|
|
</xs:choice>
|
|
<xs:attribute name='serviceToken' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
|
|
<xs:element name='canAccessResponse'>
|
|
<xs:complexType>
|
|
<xs:attribute name='result' type='xs:boolean' use='required'/>
|
|
<xs:attribute name='userToken' type='xs:string' use='optional'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
|
|
<xs:element name='userLoggedIn'>
|
|
<xs:complexType>
|
|
<xs:attribute name='serviceToken' type='xs:string' use='required'/>
|
|
<xs:attribute name='userToken' type='xs:string' use='required'/>
|
|
<xs:attribute name='userName' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
|
|
<xs:element name='hasPrivilege'>
|
|
<xs:complexType>
|
|
<xs:attribute name='serviceToken' type='xs:string' use='required'/>
|
|
<xs:attribute name='userToken' type='xs:string' use='required'/>
|
|
<xs:attribute name='privilegeId' type='PrivilegeId' use='required'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
|
|
<xs:element name='hasPrivilegeResponse'>
|
|
<xs:complexType>
|
|
<xs:attribute name='result' type='xs:boolean' use='required'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
|
|
<xs:element name='downloadPrivileges'>
|
|
<xs:complexType>
|
|
<xs:attribute name='serviceToken' type='xs:string' use='required'/>
|
|
<xs:attribute name='userToken' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
|
|
<xs:element name='downloadPrivilegesResponse'>
|
|
<xs:complexType>
|
|
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
|
<xs:element name='include' type='Privilege'/>
|
|
<xs:element name='exclude' type='Privilege'/>
|
|
</xs:choice>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
|
|
<xs:complexType name='GetToken'>
|
|
<xs:attribute name='deviceId' type='xs:string' use='optional'/>
|
|
<xs:attribute name='serviceId' type='xs:string' use='optional'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='GetTokenResponse'>
|
|
<xs:attribute name='token' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='Friend'>
|
|
<xs:attribute name='jid' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='FriendResponse'>
|
|
<xs:complexContent>
|
|
<xs:extension base='Friend'>
|
|
<xs:attribute name='result' type='xs:boolean' use='required'/>
|
|
<xs:attribute name='secondaryTrustAllowed' type='xs:boolean' use='optional' default='false'/>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='CanReadBase' abstract='true'>
|
|
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
|
<xs:element name='node'>
|
|
<xs:complexType>
|
|
<xs:attribute name='nodeId' type='xs:string' use='required'/>
|
|
<xs:attribute name='sourceId' type='xs:string' use='optional'/>
|
|
<xs:attribute name='cacheType' type='xs:string' use='optional'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
<xs:element name='field'>
|
|
<xs:complexType>
|
|
<xs:attribute name='name' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:choice>
|
|
<xs:attributeGroup ref='sn:fieldTypes'/>
|
|
<xs:attribute name='all' type='xs:boolean' use='optional' default='false'/>
|
|
<xs:attribute name='historical' type='xs:boolean' use='optional' default='false'/>
|
|
<xs:attribute name='jid' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='CanRead'>
|
|
<xs:complexContent>
|
|
<xs:extension base='CanReadBase'>
|
|
<xs:attribute name='token' type='xs:string' use='optional'/>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='CanReadResponse'>
|
|
<xs:complexContent>
|
|
<xs:extension base='CanReadBase'>
|
|
<xs:attribute name='result' type='xs:boolean' use='required'/>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='CanControlBase' abstract='true'>
|
|
<xs:choice minOccurs='0' maxOccurs='unbounded'>
|
|
<xs:element name='node'>
|
|
<xs:complexType>
|
|
<xs:attribute name='nodeId' type='xs:string' use='required'/>
|
|
<xs:attribute name='sourceId' type='xs:string' use='optional'/>
|
|
<xs:attribute name='cacheType' type='xs:string' use='optional'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
<xs:element name='parameter'>
|
|
<xs:complexType>
|
|
<xs:attribute name='name' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
</xs:element>
|
|
</xs:choice>
|
|
<xs:attribute name='jid' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='CanControl'>
|
|
<xs:complexContent>
|
|
<xs:extension base='CanControlBase'>
|
|
<xs:attribute name='token' type='xs:string' use='optional'/>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='CanControlResponse'>
|
|
<xs:complexContent>
|
|
<xs:extension base='CanControlBase'>
|
|
<xs:attribute name='result' type='xs:boolean' use='required'/>
|
|
</xs:extension>
|
|
</xs:complexContent>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='JidCredential'>
|
|
<xs:attribute name='value' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='Ip4Credential'>
|
|
<xs:attribute name='value' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='Ip6Credential'>
|
|
<xs:attribute name='value' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='HostNameCredential'>
|
|
<xs:attribute name='value' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='X509CertificateCredential'>
|
|
<xs:attribute name='base64' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='X509CertificateThumbprintCredential'>
|
|
<xs:attribute name='base64' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='UserNameCredential'>
|
|
<xs:attribute name='value' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='LongitudeCredential'>
|
|
<xs:attribute name='value' type='xs:double' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='LatitudeCredential'>
|
|
<xs:attribute name='value' type='xs:double' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='AltitudeCredential'>
|
|
<xs:attribute name='value' type='xs:double' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='SsoCredential'>
|
|
<xs:attribute name='value' type='xs:string' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='ProtocolCredential'>
|
|
<xs:attribute name='value' type='ProtocolName' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:complexType name='Privilege'>
|
|
<xs:attribute name='id' type='PrivilegeId' use='required'/>
|
|
</xs:complexType>
|
|
|
|
<xs:simpleType name='ProtocolName'>
|
|
<xs:restriction base='xs:string'>
|
|
<xs:enumeration value='XMPP'/>
|
|
<xs:enumeration value='HTTP'/>
|
|
<xs:enumeration value='HTTPS'/>
|
|
<xs:enumeration value='TcpSocket'/>
|
|
<xs:enumeration value='UdpSocket'/>
|
|
<xs:enumeration value='Queue'/>
|
|
<xs:enumeration value='Internal'/>
|
|
<xs:enumeration value='Other'/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
|
|
<xs:simpleType name='PrivilegeId'>
|
|
<xs:restriction base='xs:string'>
|
|
<xs:pattern value='^[^.]+([.][^.]+)*$'/>
|
|
</xs:restriction>
|
|
</xs:simpleType>
|
|
|
|
</xs:schema>]]>
|
|
</code>
|
|
</section1>
|
|
<section1 topic='For more information' anchor='moreinfo'>
|
|
<p>
|
|
For more information, please see the following resources:
|
|
</p>
|
|
<ul>
|
|
<li>
|
|
<p>
|
|
The <link url='http://wiki.xmpp.org/web/Tech_pages/SensorNetworks'>Sensor Network section of the XMPP Wiki</link> contains further information about the
|
|
use of the sensor network XEPs, links to implementations, discussions, etc.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
The XEP's and related projects are also available on <link url='https://github.com/joachimlindborg/'>github</link>, thanks to Joachim Lindborg.
|
|
</p>
|
|
</li>
|
|
<li>
|
|
<p>
|
|
A presentation giving an overview of all extensions related to Internet of Things can be found here:
|
|
<link url='http://prezi.com/esosntqhewhs/iot-xmpp/'>http://prezi.com/esosntqhewhs/iot-xmpp/</link>.
|
|
</p>
|
|
</li>
|
|
</ul>
|
|
</section1>
|
|
<section1 topic='Acknowledgements' anchor='ack'>
|
|
<p>Thanks to Joachim Lindborg, Karin Forsell, Tina Beckman and Teemu Väisänen for all valuable feedback.</p>
|
|
</section1>
|
|
</xep>
|