Verwenden der IoT Central-REST-API zum Verwalten von Geräten
Mit der IoT Central-REST-API können Sie Clientanwendungen entwickeln, die in IoT Central-Anwendungen integriert werden. Sie können die REST-API verwenden, um Geräte in Ihrer IoT Central-Anwendung zu verwalten.
Jeder IoT Central-REST-API-Aufruf erfordert einen Autorisierungsheader. Weitere Informationen finden Sie unter Authentifizieren und Autorisieren von IoT Central-REST-API-Aufrufen.
Die Referenzdokumentation für die IoT Central-REST-API finden Sie unter Azure IoT Central: Referenz zur REST-API.
Informationen zum Verwalten von Geräten mithilfe der IoT Central-Benutzeroberfläche finden Sie unter Verwalten einzelner Geräte in Ihrer Azure IoT Central-Anwendung.
REST-API für Device Messaging
Mit der IoT Central-REST-API können Sie folgende Aktionen ausführen:
- Hinzufügen eines Geräts zu Ihrer Anwendung
- Durchführen eines Updates für ein Gerät in Ihrer Anwendung
- Abrufen einer Liste der Geräte in der Anwendung
- Abrufen eines Geräts nach ID
- Abrufen von Geräteanmeldeinformationen
- Löschen eines Geräts in Ihrer Anwendung
- Filtern der Liste der Geräte in der Anwendung
Hinzufügen eines Geräts
Verwenden Sie die folgende Anforderung, um ein neues Gerät zu erstellen.
PUT https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31
Das folgende Beispiel zeigt einen Anforderungstext, der ein Gerät für eine Gerätevorlage hinzufügt. Die template
-Details können Sie auf der Seite für Gerätevorlagen auf der Benutzeroberfläche der IoT Central-Anwendung abrufen.
{
"displayName": "CheckoutThermostat",
"template": "dtmi:contoso:Thermostat;1",
"simulated": true,
"enabled": true
}
Der Anforderungstext enthält einige erforderliche Felder:
@displayName
: Dies ist der Anzeigename des Geräts.@enabled
: deklariert dieses Objekt als Schnittstelle@etag
: Dies ist das ETag, das verwendet wird, um Konflikte bei Geräteupdates zu verhindern.simulated
: Wird das Gerät simuliert?template
: Dies ist die Gerätevorlagendefinition für das Gerät.
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "thermostat1",
"etag": "eyJoZWFkZXIiOiJcIjI0MDAwYTdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDIwMDAwMFwiIiwiZGF0YSI6IlwiMzMwMDQ1M2EtMDAwMC0wMzAwLTAwMDAtNjFiODFkMjAwMDAwXCIifQ",
"displayName": "CheckoutThermostat",
"simulated": true,
"provisioned": false,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
}
Abrufen eines Geräts
Verwenden Sie die folgende Anforderung, um Details eines Geräts aus Ihrer Anwendung abzurufen:
GET https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31
Hinweis
Sie können die deviceId
von der IoT Central-Anwendungsbenutzeroberfläche abrufen, indem Sie mit der Maus auf ein Gerät zeigen.
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "5jcwskdwbm",
"etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
"displayName": "Thermostat - 5jcwskdwbm",
"simulated": false,
"provisioned": false,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
}
Die folgende Tabelle zeigt die Zuordnung zwischen dem Statuswert für ein Gerät in der Benutzeroberfläche und den Werten, die von der REST-API verwendet werden, um mit Geräten zu interagieren:
Gerätestatus in der Benutzeroberfläche | Hinweise | GET-Anforderung der REST-API |
---|---|---|
Warten auf Genehmigung | Die Option „Automatisch genehmigen“ ist in der Geräteverbindungsgruppe deaktiviert, und das Gerät wurde nicht über die Benutzeroberfläche hinzugefügt. Ein Benutzer muss das Gerät manuell über die Benutzeroberfläche genehmigen, bevor es verwendet werden kann. |
Provisioned: false Enabled: false |
Registriert | Ein Gerät wurde automatisch oder manuell genehmigt. | Provisioned: false Enabled: true |
Bereitgestellt | Das Gerät wurde bereitgestellt und kann eine Verbindung mit Ihrer IoT Central-Anwendung herstellen. | Provisioned: true Enabled: true |
Blockiert | Das Gerät darf keine Verbindung mit Ihrer IoT Central-Anwendung herstellen. Sie können ein Gerät blockieren, das sich in einem der anderen Zustände befindet. | Provisioned: ist abhängig von Waiting for approval /Registered /Provisioned status . Enabled: false |
Abrufen der Geräteanmeldeinformationen
Verwenden Sie die folgende Anforderung, um die Anmeldeinformationen eines Geräts aus Ihrer Anwendung abzurufen:
GET https://{your app subdomain}/api/devices/{deviceId}/credentials?api-version=2022-07-31
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"idScope": "0ne003E64EF",
"symmetricKey": {
"primaryKey": "XUQvxGl6+Q1R0NKN5kOTmLOWsSKiuqs5N9unrjYCH4k=",
"secondaryKey": "Qp/MTGHjn5MUTw4NVGhRfG+P+L1zh1gtAhO/KH8kn5c="
}
}
Aktualisieren eines Geräts
PATCH https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31
Der folgende Beispielanforderungstext ändert das Feld enabled
in false
:
{
"enabled": false
}
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "thermostat1",
"etag": "eyJoZWFkZXIiOiJcIjI0MDAwYTdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDIwMDAwMFwiIiwiZGF0YSI6IlwiMzMwMDQ1M2EtMDAwMC0wMzAwLTAwMDAtNjFiODFkMjAwMDAwXCIifQ",
"displayName": "CheckoutThermostat",
"simulated": true,
"provisioned": false,
"template": "dtmi:contoso:Thermostat;1",
"enabled": false
}
Löschen eines Mediums
Verwenden Sie die folgende Anforderung, um ein Gerät zu löschen:
DELETE https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31
Listen Sie die Geräte auf.
Verwenden Sie die folgende Anforderung, um eine Liste von Geräten aus Ihrer Anwendung abzurufen:
GET https://{your app subdomain}/api/devices?api-version=2022-07-31
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"value": [
{
"id": "5jcwskdwbm",
"etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
"displayName": "Thermostat - 5jcwskdwbm",
"simulated": false,
"provisioned": false,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
},
{
"id": "ccc",
"etag": "eyJoZWFkZXIiOiJcIjI0MDAwYjdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDJjMDAwMFwiIn0",
"displayName": "CheckoutThermostat",
"simulated": true,
"provisioned": true,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
}
]
}
Zuweisen eines Bereitstellungsmanifests
Wenn Sie ein IoT Edge-Gerät hinzufügen, können Sie die API verwenden, um dem Gerät ein IoT Edge-Bereitstellungsmanifest zuzuweisen. Weitere Informationen finden Sie unter Zuweisen eines Bereitstellungsmanifests zu einem Gerät.
Verwenden von ODATA-Filtern
In der Vorschauversion der API (api-version=2022-10-31-preview
) können Sie ODATA-Filter verwenden, um die von der API zum Auflisten von Geräten zurückgegebenen Ergebnisse zu filtern und zu sortieren.
maxpagesize
Verwenden Sie maxpagesize, um die Ergebnisgröße festzulegen. Die maximale Größe für zurückgegebene Ergebnisse beträgt 100, und die Standardgröße ist 25.
Verwenden Sie die folgende Anforderung, um eines der zehn wichtigsten Geräte aus Ihrer Anwendung abzurufen:
GET https://{your app subdomain}/api/devices?api-version=2022-10-31-preview&maxpagesize=10
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"value": [
{
"id": "5jcwskdwbm",
"etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
"displayName": "Thermostat - 5jcwskdwbm",
"simulated": false,
"provisioned": false,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
},
{
"id": "5jcwskdgdwbm",
"etag": "eyJoZWdhhZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
"displayName": "RS40 Occupancy Sensor - 5jcwskdgdwbm",
"simulated": false,
"provisioned": false,
"template": "urn:modelDefinition:aqlyr1ulfku:tz5rut2pvx",
"enabled": true
},
...
],
"nextLink": "https://{your app subdomain}.azureiotcentral.com/api/devices?api-version=2022-07-31&%24top=1&%24skiptoken=%257B%2522token%2522%253A%2522%252BRID%253A%7EJWYqAOis7THQbBQAAAAAAg%253D%253D%2523RT%253A1%2523TRC%253A1%2523ISV%253A2%2523IEO%253A65551%2523QCF%253A4%2522%252C%2522range%2522%253A%257B%2522min%2522%253A%2522%2522%252C%2522max%2522%253A%252205C1D7F7591D44%2522%257D%257D"
}
Die Antwort enthält einen nextLink-Wert, mit dem Sie die nächste Ergebnisseite abrufen können.
filter
Verwenden Sie filter, um Ausdrücke zum Filtern der Geräteliste zu erstellen. In der folgenden Tabelle sind die Vergleichsoperatoren aufgeführt, die Sie verwenden können:
Vergleichsoperator | Symbol | Beispiel |
---|---|---|
Equals | eq | id eq 'device1' and scopes eq 'redmond' |
Not Equals | ne | Enabled ne true |
Kleiner als oder gleich | le | id le '26whl7mure6' |
Kleiner als | lt | id lt '26whl7mure6' |
Größer als oder gleich | ge | id ge '26whl7mure6' |
Größer als | gt | id gt '26whl7mure6' |
In der folgenden Tabelle sind die logischen Operatoren aufgeführt, die Sie in filter-Ausdrücken verwenden können:
Logischer Operator | Symbol | Beispiel |
---|---|---|
UND | und | id eq 'device1' and enabled eq true |
oder | oder | id eq 'device1' or simulated eq false |
Aktuell funktioniert filter mit den folgenden Gerätefeldern:
FieldName | type | Beschreibung |
---|---|---|
id |
string | Geräte-ID |
displayName |
Zeichenfolge | Anzeigename des Geräts |
enabled |
boolean | Aktivierungsstatus des Geräts |
provisioned |
boolean | Bereitstellungsstatus des Geräts |
simulated |
boolean | Simulationsstatus des Geräts |
template |
Zeichenfolge | Gerätevorlagen-ID |
scopes |
Zeichenfolge | Organisations-ID |
Für „filter“ unterstützte Funktionen:
Aktuell ist die contains
-Funktion die einzige unterstützte Filterfunktion für Gerätelisten:
filter=contains(displayName, 'device1')
Das folgende Beispiel zeigt, wie alle Geräte abgerufen werden, in denen die Zeichenfolge thermostat
im Anzeigename enthalten ist:
GET https://{your app subdomain}/api/deviceTemplates?api-version=2022-10-31-preview&filter=contains(displayName, 'thermostat')
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"value": [
{
"id": "5jcwskdwbm",
"etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
"displayName": "thermostat1",
"simulated": false,
"provisioned": false,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
},
{
"id": "ccc",
"etag": "eyJoZWFkZXIiOiJcIjI0MDAwYjdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDJjMDAwMFwiIn0",
"displayName": "thermostat2",
"simulated": true,
"provisioned": true,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
}
]
}
orderby
Verwenden Sie orderby, um die Ergebnisse zu sortieren. Derzeit ermöglicht orderby nur das Sortieren nach displayName. orderby sortiert standardmäßig in aufsteigender Reihenfolge. Mit desc können Sie in absteigender Reihenfolge sortieren. Beispiel:
orderby=displayName
orderby=displayName desc
Das folgende Beispiel zeigt, wie alle Gerätevorlagen abgerufen werden, in denen das Ergebnis nach displayName
sortiert wird:
GET https://{your app subdomain}/api/devices?api-version=2022-10-31-preview&orderby=displayName
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"value": [
{
"id": "ccc",
"etag": "eyJoZWFkZXIiOiJcIjI0MDAwYjdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDJjMDAwMFwiIn0",
"displayName": "CheckoutThermostat",
"simulated": true,
"provisioned": true,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
},
{
"id": "5jcwskdwbm",
"etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
"displayName": "Thermostat - 5jcwskdwbm",
"simulated": false,
"provisioned": false,
"template": "dtmi:contoso:Thermostat;1",
"enabled": true
}
]
}
Sie können auch zwei oder mehr Filter kombinieren.
Das folgende Beispiel zeigt, wie Sie die ersten drei Geräte abrufen, bei denen der Anzeigename die Zeichenfolge Thermostat
enthält.
GET https://{your app subdomain}/api/deviceTemplates?api-version=2022-10-31-preview&filter=contains(displayName, 'Thermostat')&maxpagesize=3
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"value": [
{
"id": "1fpwlahp0zp",
"displayName": "Thermostat - 1fpwlahp0zp",
"simulated": false,
"provisioned": false,
"etag": "eyJwZ0luc3RhbmNlIjoiYTRjZGQyMjQtZjIxMi00MTI4LTkyMTMtZjcwMTBlZDhkOWQ0In0=",
"template": "dtmi:contoso:mythermostattemplate;1",
"enabled": true
},
{
"id": "1yg0zvpz9un",
"displayName": "Thermostat - 1yg0zvpz9un",
"simulated": false,
"provisioned": false,
"etag": "eyJwZ0luc3RhbmNlIjoiZGQ1YTY4MDUtYzQxNS00ZTMxLTgxM2ItNTRiYjdiYWQ1MWQ2In0=",
"template": "dtmi:contoso:mythermostattemplate;1",
"enabled": true
},
{
"id": "20cp9l96znn",
"displayName": "Thermostat - 20cp9l96znn",
"simulated": false,
"provisioned": false,
"etag": "eyJwZ0luc3RhbmNlIjoiNGUzNWM4OTItNDBmZi00OTcyLWExYjUtM2I4ZjU5NGZkODBmIn0=",
"template": "dtmi:contoso:mythermostattemplate;1",
"enabled": true
}
],
"nextLink": "https://{your app subdomain}.azureiotcentral.com/api/devices?api-version=2022-10-31-preview&filter=contains%28displayName%2C+%27Thermostat%27%29&maxpagesize=3&$skiptoken=aHR0cHM6Ly9pb3RjLXByb2QtbG4taW5ma3YteWRtLnZhdWx0LmF6dXJlLm5ldC9zZWNyZXRzL2FwaS1lbmMta2V5LzY0MzZkOTY2ZWRjMjRmMDQ5YWM1NmYzMzFhYzIyZjZi%3AgWMDkfdpzBF0eYiYCGRdGQ%3D%3D%3ATVTgi5YVv%2FBfCd7Oos6ayrCIy9CaSUVu2ULktGQoHZDlaN7uPUa1OIuW0MCqT3spVXlSRQ9wgNFXsvb6mXMT3WWapcDB4QPynkI%2FE1Z8k7s3OWiBW3EQpdtit3JTCbj8qRNFkA%3D%3D%3Aq63Js0HL7OCq%2BkTQ19veqA%3D%3D"
}
Gerätegruppen
Sie können Gerätegruppen in einer IoT Central-Anwendung erstellen, um aggregierte Daten zu überwachen, mit Aufträgen zu verwenden und den Zugriff zu verwalten. Gerätegruppen werden anhand eines Filters definiert, der die Geräte auswählt, die der Gruppe hinzugefügt werden sollen. Gerätegruppen können im IoT Central-Portal oder mithilfe der API erstellt werden.
Hinzufügen einer Gerätegruppe
Verwenden Sie die folgende Anforderung, um eine neue Gerätegruppe zu erstellen.
PUT https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31
Wenn Sie eine Gerätegruppe erstellen, definieren Sie einen filter
, der die Geräte auswählt, die der Gruppe hinzugefügt werden sollen. Eine filter
identifiziert eine Gerätevorlage und alle Eigenschaften, die übereinstimmen sollen. Im folgenden Beispiel wird eine Gerätegruppe erstellt, die alle der Vorlage „dtmi:modelDefinition:dtdlv2“ zugeordneten Geräte enthält, deren provisioned
-Eigenschaft auf true
festgelegt ist.
{
"displayName": "Device group 1",
"description": "Custom device group.",
"filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
"organizations": [
"seattle"
]
}
Der Anforderungstext enthält einige erforderliche Felder:
@displayName
: Anzeigename der Gerätegruppe.@filter
: Abfrage, die definiert, welche Geräte in dieser Gruppe enthalten sein sollen.@etag
: Dies ist das ETag, das verwendet wird, um Konflikte bei Geräteupdates zu verhindern.description
: Kurze Zusammenfassung der Gerätegruppe.
Das Feld „Organisationen“ wird nur verwendet, wenn für eine Anwendung eine Organisationshierarchie definiert ist. Weitere Informationen zu Organisationen finden Sie unter Verwalten von IoT Central-Organisationen.
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "group1",
"displayName": "Device group 1",
"description": "Custom device group.",
"filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
"organizations": [
"seattle"
]
}
Abrufen einer Gerätegruppe
Verwenden Sie die folgende Anforderung, um Details einer Gerätegruppe aus Ihrer Anwendung abzurufen:
GET https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31
- deviceGroupId – Eindeutige ID für die Gerätegruppe.
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "475cad48-b7ff-4a09-b51e-1a9021385453",
"displayName": "DeviceGroupEntry1",
"description": "This is a default device group containing all the devices for this particular Device Template.",
"filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
"organizations": [
"seattle"
]
}
Aktualisieren einer Gerätegruppe
PATCH https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31
Der Beispielanforderungstext sieht wie im folgenden Beispiel aus, in dem displayName
der Gerätegruppe aktualisiert wird:
{
"displayName": "New group name"
}
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "group1",
"displayName": "New group name",
"description": "Custom device group.",
"filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
"organizations": [
"seattle"
]
}
Löschen einer Gerätegruppe
Verwenden Sie die folgende Anforderung, um eine Gerätegruppe zu löschen:
DELETE https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31
Auflisten von Gerätegruppen
Verwenden Sie die folgende Anforderung, um eine Liste von Gerätegruppen aus Ihrer Anwendung abzurufen:
GET https://{your app subdomain}/api/deviceGroups?api-version=2022-07-31
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"value": [
{
"id": "475cad48-b7ff-4a09-b51e-1a9021385453",
"displayName": "DeviceGroupEntry1",
"description": "This is a default device group containing all the devices for this particular Device Template.",
"filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
"organizations": [
"seattle"
]
},
{
"id": "c2d5ae1d-2cb7-4f58-bf44-5e816aba0a0e",
"displayName": "DeviceGroupEntry2",
"description": "This is a default device group containing all the devices for this particular Device Template.",
"filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:model1\"",
"organizations": [
"redmond"
]
},
{
"id": "241ad72b-32aa-4216-aabe-91b240582c8d",
"displayName": "DeviceGroupEntry3",
"description": "This is a default device group containing all the devices for this particular Device Template.",
"filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:model2\" AND $simulated = true"
},
{
"id": "group4",
"displayName": "DeviceGroupEntry4",
"description": "This is a default device group containing all the devices for this particular Device Template.",
"filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:model3\""
}
]
}
Registrierungsgruppen
Registrierungsgruppen werden zum Verwalten der Geräteauthentifizierungsoptionen in Ihrer IoT Central-Anwendung verwendet. Weitere Informationen finden Sie unter Geräteauthentifizierungskonzepte in IoT Central.
Informationen zum Erstellen und Verwalten von Registrierungsgruppen über die Benutzeroberfläche finden Sie unter Verbinden von Geräten mit X.509-Zertifikaten mit einer IoT Central-Anwendung.
Erstellen einer Registrierungsgruppe
Wenn Sie eine Registrierungsgruppe für Geräte erstellen, die X.509-Zertifikate verwenden, müssen Sie zuerst das Stamm- oder Zwischenzertifikat in Ihre IoT Central-Anwendung hochladen.
Generieren von Stamm- und Gerätezertifikaten
In diesem Abschnitt generieren Sie die X.509-Zertifikate, die Sie zum Verbinden eines Geräts mit IoT Central benötigen.
Warnung
Diese Methode zum Erstellen von X.509-Zertifikaten dient nur zu Testzwecken. Für eine Produktionsumgebung sollten Sie Ihren offiziellen, sicheren Mechanismus für Zertifikatgenerierung verwenden.
Navigieren Sie zum Zertifikatgeneratorskript im Microsoft Azure IoT SDK für Node.js, das Sie heruntergeladen haben. Installieren Sie die erforderlichen Pakete:
cd azure-iot-sdk-node/provisioning/tools npm install
Erstellen Sie ein Stammzertifikat, und leiten Sie dann ein Gerätezertifikat durch Ausführen des Skripts ab:
node create_test_cert.js root mytestrootcert node create_test_cert.js device sample-device-01 mytestrootcert
Tipp
Eine Geräte-ID kann Buchstaben, Ziffern und das Zeichen
-
enthalten.
Diese Befehle erzeugen das folgende Stammzertifikat und das Gerätezertifikat:
filename | contents |
---|---|
mytestrootcert_cert.pem | Der öffentliche Teil des X.509-Stammzertifikats |
mytestrootcert_key.pem | Der private Schlüssel für das X.509-Stammzertifikat |
mytestrootcert_fullchain.pem | Die gesamte Keychain (Schlüsselbund) für das X.509-Stammzertifikat |
mytestrootcert.pfx | Die PFX-Datei für das X.509-Stammzertifikat |
sampleDevice01_cert.pem | Der öffentliche Teil des X.509-Gerätezertifikats |
sampleDevice01_key.pem | Der private Schlüssel für das X.509-Gerätezertifikat |
sampleDevice01_fullchain.pem | Die gesamte Keychain (Schlüsselbund) für das X.509-Gerätezertifikat |
sampleDevice01.pfx | Die PFX-Datei für das X.509-Gerätezertifikat |
Notieren Sie sich den Speicherort dieser Dateien. Sie benötigen ihn später.
Generieren der Base64-codierten Version des Stammzertifikats
Erstellen Sie in dem Ordner auf Ihrem lokalen Computer, der die von Ihnen generierten Zertifikate enthält, eine Datei namens „convert.js“, und fügen Sie den folgenden JavaScript-Inhalt hinzu:
const fs = require('fs')
const fileContents = fs.readFileSync(process.argv[2]).toString('base64');
console.log(fileContents);
Führen Sie den folgenden Befehl zum Generieren einer Base64-codierten Version des Zertifikats aus:
node convert.js mytestrootcert_cert.pem
Notieren Sie sich die Base64-codierte Version des Zertifikats. Sie benötigen ihn später.
Hinzufügen einer X.509-Registrierungsgruppe
Verwenden Sie die folgende Anforderung zum Erstellen einer neuen Registrierungsgruppe mit der ID myx509eg
:
PUT https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg?api-version=2022-07-31
Das folgende Beispiel zeigt einen Anforderungstext, der eine neue X.509-Registrierungsgruppe hinzufügt:
{
"displayName": "My group",
"enabled": true,
"type": "iot",
"attestation": {
"type": "x509"
}
}
Der Anforderungstext enthält einige erforderliche Felder:
@displayName
: Anzeigename der Registrierungsgruppe.@enabled
: Gibt an, ob die Geräte, die die Gruppe verwenden, eine Verbindung mit IoT Central herstellen dürfen.@type
: Typ der Geräte, die eine Verbindung über die Gruppe herstellen – entwederiot
oderiotEdge
.attestation
: Der Nachweismechanismus für die Registrierungsgruppe – entwedersymmetricKey
oderx509
.
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "myEnrollmentGroupId",
"displayName": "My group",
"enabled": true,
"type": "iot",
"attestation": {
"type": "x509",
"x509": {
"signingCertificates": {}
}
},
"etag": "IjdiMDcxZWQ5LTAwMDAtMDcwMC0wMDAwLTYzMWI3MWQ4MDAwMCI="
}
Hinzufügen eines X.509-Zertifikats zu einer Registrierungsgruppe
Verwenden Sie die folgende Anforderung, um das primäre X.509-Zertifikat der Registrierungsgruppe „myx509eg“ festzulegen:
PUT https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary?api-version=2022-07-31
Verwenden Sie diese Anforderung, um der Registrierungsgruppe ein primäres oder sekundäres X.509-Zertifikat hinzuzufügen.
Das folgende Beispiel zeigt einen Anforderungstext, der einer Registrierungsgruppe ein X.509-Zertifikat hinzufügt:
{
"verified": false,
"certificate": "<base64-certificate>"
}
- certificate – Die Base64-Version des Zertifikats, die Sie sich zuvor notiert haben.
- verified (überprüft) –
true
wenn Sie bestätigen, dass das Zertifikat gültig ist;false
wenn Sie die Gültigkeit des Zertifikats nachweisen müssen.
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"verified": false,
"info": {
"sha1Thumbprint": "644543467786B60C14DFE6B7C968A1990CF63EAC"
},
"etag": "IjE3MDAwODNhLTAwMDAtMDcwMC0wMDAwLTYyNjFmNzk0MDAwMCI="
}
Generieren von Überprüfungscode für ein X.509-Zertifikat
Verwenden Sie die folgende Anforderung zum Generieren eines Überprüfungscodes für das primäre oder sekundäre X.509-Zertifikat einer Registrierungsgruppe.
Wenn Sie in der vorherigen Anforderung verified
auf false
festgelegt haben, verwenden Sie die folgende Anforderung zum Generieren eines Überprüfungscodes für das primäre X.509-Zertifikat in der Registrierungsgruppe myx509eg
:
POST https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary/generateVerificationCode?api-version=2022-07-31
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"verificationCode": "<certificate-verification-code>"
}
Notieren Sie sich den Überprüfungscode. Sie benötigen ihn im nächsten Schritt.
Generieren des Verifizierungszertifikats
Verwenden Sie den folgenden Befehl zum Generieren eines Überprüfungszertifikats aus dem Überprüfungscode im vorherigen Schritt:
node create_test_cert.js verification --ca mytestrootcert_cert.pem --key mytestrootcert_key.pem --nonce {verification-code}
Führen Sie den folgenden Befehl zum Generieren einer Base64-codierten Version des Zertifikats aus:
node convert.js verification_cert.pem
Notieren Sie sich die Base64-codierte Version des Zertifikats. Sie benötigen ihn später.
Überprüfen des X.509-Zertifikats einer Registrierungsgruppe
Verwenden Sie die folgende Anforderung zum Überprüfen des primären X.509-Zertifikats der Registrierungsgruppe myx509eg
, indem Sie das Zertifikat mit dem signierten Überprüfungscode angeben:
POST PUT https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary/verify?api-version=2022-07-31
Das folgende Beispiel zeigt einen Anforderungstext, der ein X.509-Zertifikat überprüft:
{
"certificate": "base64-verification-certificate"
}
Abrufen eines X.509-Zertifikats einer Registrierungsgruppe
Verwenden Sie die folgende Anforderung zum Abrufen von Details des X.509-Zertifikats einer Registrierungsgruppe aus Ihrer Anwendung:
GET https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary?api-version=2022-07-31
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"verified": true,
"info": {
"sha1Thumbprint": "644543467786B60C14DFE6B7C968A1990CF63EAC"
},
"etag": "IjE3MDAwODNhLTAwMDAtMDcwMC0wMDAwLTYyNjFmNzk0MDAwMCI="
}
Löschen eines X.509-Zertifikats aus einer Registrierungsgruppe
Verwenden Sie die folgende Anforderung zum Löschen des primären X.509-Zertifikat aus einer Registrierungsgruppe mit der ID myx509eg
:
DELETE https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary?api-version=2022-07-31
Abrufen einer Registrierungsgruppe
Verwenden Sie die folgende Anforderung zum Abrufen von Details einer Registrierungsgruppe mit der ID mysymmetric
:
GET https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/mysymmetric?api-version=2022-07-31
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "mysymmetric",
"displayName": "My group",
"enabled": true,
"type": "iot",
"attestation": {
"type": "symmetricKey",
"symmetricKey": {
"primaryKey": "<primary-symmetric-key>",
"secondaryKey": "<secondary-symmetric-key>"
}
},
"etag": "IjA4MDUwMTJiLTAwMDAtMDcwMC0wMDAwLTYyODJhOWVjMDAwMCI="
}
Aktualisieren einer Registrierungsgruppe
Verwenden Sie die folgende Anforderung zum Aktualisieren einer Registrierungsgruppe.
PATCH https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg?api-version=2022-07-31
Das folgende Beispiel zeigt einen Anforderungstext, in dem der Anzeigename einer Registrierungsgruppe aktualisiert wird:
{
"displayName": "My new group name",
}
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"id": "myEnrollmentGroupId",
"displayName": "My new group name",
"enabled": true,
"type": "iot",
"attestation": {
"type": "symmetricKey",
"symmetricKey": {
"primaryKey": "<primary-symmetric-key>",
"secondaryKey": "<secondary-symmetric-key>"
}
},
"etag": "IjA4MDUwMTJiLTAwMDAtMDcwMC0wMDAwLTYyODJhOWVjMDAwMCI="
}
Löschen einer Registrierungsgruppe
Verwenden Sie die folgende Anforderung zum Löschen einer Registrierungsgruppe mit der ID myx509eg
:
DELETE https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg?api-version=2022-07-31
Auflisten von Registrierungsgruppen
Verwenden Sie die folgende Anforderung zum Abrufen einer Liste von Registrierungsgruppen aus Ihrer Anwendung:
GET https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups?api-version=2022-07-31
Die Antwort auf diese Anforderung sieht wie das folgende Beispiel aus:
{
"value": [
{
"id": "myEnrollmentGroupId",
"displayName": "My group",
"enabled": true,
"type": "iot",
"attestation": {
"type": "symmetricKey",
"symmetricKey": {
"primaryKey": "primaryKey",
"secondaryKey": "secondarykey"
}
},
"etag": "IjZkMDc1YTgzLTAwMDAtMDcwMC0wMDAwLTYzMTc5ZjA4MDAwMCI="
},
{
"id": "enrollmentGroupId2",
"displayName": "My group",
"enabled": true,
"type": "iot",
"attestation": {
"type": "x509",
"x509": {
"signingCertificates": {}
}
},
"etag": "IjZkMDdjNjkyLTAwMDAtMDcwMC0wMDAwLTYzMTdhMDY1MDAwMCI="
}
]
}