Share via


Uso de la API REST de IoT Central para administrar dispositivos

La API de REST de IoT Central permite desarrollar aplicaciones cliente que se integran con aplicaciones de IoT Central. Puede usar la API REST para administrar dispositivos en la aplicación de IoT Central.

Cada llamada a la API REST de IoT Central requiere un encabezado de autorización. Para obtener más información, vea los procedimientos de autenticación y autorización de llamadas a la API REST de IoT Central.

Para ver la documentación de referencia sobre la API REST de IoT Central, consulte Referencia de la API REST de Azure IoT Central.

Sugerencia

Puede usar Postman para probar las llamadas API REST que se describen en este artículo. Descargue la colección de Postman de IoT Central e impórtela en Postman. En la colección, deberá establecer variables como el subdominio de la aplicación y el token de administrador.

Para obtener información sobre cómo administrar dispositivos mediante la interfaz de usuario de IoT Central, consulte Administración de dispositivos individuales en la aplicación de Azure IoT Central.

API REST de dispositivos

La API de REST de IoT Central le permite:

  • Agregar un dispositivo a la aplicación
  • Actualizar un dispositivo en la aplicación
  • Obtener una lista de los dispositivos en la aplicación
  • Obtener un dispositivo por identificador
  • Obtener una credencial de dispositivo
  • Eliminar dispositivo en la aplicación
  • Filtrar la lista de dispositivos en la aplicación

Agregar un dispositivo

Use la siguiente solicitud para crear un nuevo dispositivo.

PUT https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31

En el ejemplo siguiente se muestra un cuerpo de solicitud que agrega un dispositivo para una plantilla de dispositivo. Puede obtener los detalles de template en la página de plantillas de dispositivo de la interfaz de usuario de la aplicación de IoT Central.

{
  "displayName": "CheckoutThermostat",
  "template": "dtmi:contoso:Thermostat;1",
  "simulated": true,
  "enabled": true
}

El cuerpo de la solicitud tiene algunos campos obligatorios:

  • @displayName: nombre para mostrar del dispositivo.
  • @enabled: declara que este objeto es una interfaz.
  • @etag: ETag se usa para evitar conflictos en las actualizaciones del dispositivo.
  • simulated: ¿el dispositivo está simulado?
  • template: la definición de plantilla de dispositivo para el dispositivo.

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "id": "thermostat1",
    "etag": "eyJoZWFkZXIiOiJcIjI0MDAwYTdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDIwMDAwMFwiIiwiZGF0YSI6IlwiMzMwMDQ1M2EtMDAwMC0wMzAwLTAwMDAtNjFiODFkMjAwMDAwXCIifQ",
    "displayName": "CheckoutThermostat",
    "simulated": true,
    "provisioned": false,
    "template": "dtmi:contoso:Thermostat;1",
    "enabled": true
}

Obtención de un dispositivo

Use la siguiente solicitud para recuperar detalles de un dispositivo desde la aplicación:

GET https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31

Nota:

Puede obtener deviceId desde la interfaz de usuario de la aplicación de IoT Central si mantiene el mouse sobre un dispositivo.

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "id": "5jcwskdwbm",
    "etag": "eyJoZWFkZXIiOiJcIjI0MDBlMDdjLTAwMDAtMDMwMC0wMDAwLTYxYjgxYmVlMDAwMFwiIn0",
    "displayName": "Thermostat - 5jcwskdwbm",
    "simulated": false,
    "provisioned": false,
    "template": "dtmi:contoso:Thermostat;1",
    "enabled": true
}

La siguiente tabla muestra cómo el valor de estado de un dispositivo en la interfaz de usuario se corresponde con los valores utilizados por la API de REST para interactuar con los dispositivos:

Estado de la Interfaz de usuario del dispositivo Notas Obtener API REST
A la espera de aprobación La opción de aprobación automática está deshabilitada en el grupo de conexión de dispositivos y el dispositivo no se ha agregado a través de la interfaz de usuario.
Un usuario debe aprobar manualmente el dispositivo a través de la interfaz de usuario antes de poder utilizarlo.
Provisioned: false
Enabled: false
Registered Se ha aprobado un dispositivo de forma automática o manual. Provisioned: false
Enabled: true
aprovisionado El dispositivo se ha aprovisionado y puede conectarse a su aplicación IoT Central. Provisioned: true
Enabled: true
Bloqueado El dispositivo no puede conectarse a su aplicación IoT Central. Puede bloquear un dispositivo que se encuentre en cualquiera de los otros estados. Provisioned: depende de Waiting for approval/Registered/Provisioned status
Enabled: false

Obtención de las credenciales del dispositivo

Use la siguiente solicitud para recuperar las credenciales de un dispositivo desde la aplicación:

GET https://{your app subdomain}/api/devices/{deviceId}/credentials?api-version=2022-07-31

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "idScope": "0ne003E64EF",
    "symmetricKey": {
        "primaryKey": "XUQvxGl6+Q1R0NKN5kOTmLOWsSKiuqs5N9unrjYCH4k=",
        "secondaryKey": "Qp/MTGHjn5MUTw4NVGhRfG+P+L1zh1gtAhO/KH8kn5c="
    }
}

Actualizar un dispositivo

PATCH https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31

El cuerpo de la solicitud de ejemplo siguiente cambia el campo enabled a false:

{
  "enabled": false
}

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "id": "thermostat1",
    "etag": "eyJoZWFkZXIiOiJcIjI0MDAwYTdkLTAwMDAtMDMwMC0wMDAwLTYxYjgxZDIwMDAwMFwiIiwiZGF0YSI6IlwiMzMwMDQ1M2EtMDAwMC0wMzAwLTAwMDAtNjFiODFkMjAwMDAwXCIifQ",
    "displayName": "CheckoutThermostat",
    "simulated": true,
    "provisioned": false,
    "template": "dtmi:contoso:Thermostat;1",
    "enabled": false
}

Eliminar un dispositivo

Use la siguiente solicitud para eliminar un dispositivo:

DELETE https://{your app subdomain}/api/devices/{deviceId}?api-version=2022-07-31

Enumerar los dispositivos.

Use la siguiente solicitud para recuperar una lista de dispositivos de la aplicación:

GET https://{your app subdomain}/api/devices?api-version=2022-07-31

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "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
        }
    ]
}

Asignación de un manifiesto de implementación

Si agrega un dispositivo IoT Edge, puede usar la API para asignar un manifiesto de implementación de IoT Edge al dispositivo. Para obtener más información, consulte Asignación de un manifiesto de implementación a un dispositivo.

Uso de filtros ODATA

En la versión preliminar de la API (api-version=2022-10-31-preview), puede usar filtros ODATA para filtrar y ordenar los resultados devueltos por la API Enumerar dispositivos.

maxpagesize

Use maxpagesize para establecer el tamaño del resultado. El tamaño de resultado máximo devuelto es 100, y el predeterminado, 25.

Use la siguiente solicitud para recuperar un dispositivo de los 10 principales de la aplicación:

GET https://{your app subdomain}/api/devices?api-version=2022-10-31-preview&maxpagesize=10

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "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"
}

La respuesta incluye un valor nextLink, que puede usar para recuperar la siguiente página de resultados.

filter

Use filter para crear expresiones que filtren la lista de dispositivos. En la siguiente tabla se muestran los operadores de comparación que puede usar:

Operadores de comparación Símbolo Ejemplo
Igual a eq id eq 'device1' and scopes eq 'redmond'
No es igual ne Enabled ne true
Menor o igual que le id le '26whl7mure6'
Menor que lt id lt '26whl7mure6'
Mayor o igual que ge id ge '26whl7mure6'
Mayor que gt id gt '26whl7mure6'

En la siguiente tabla se muestran los operadores que puede usar en expresiones filter:

Operador lógico Símbolo Ejemplo
AND y id eq 'device1' and enabled eq true
O BIEN o id eq 'device1' or simulated eq false

Actualmente, filter funciona con los siguientes campos del dispositivo:

FieldName Tipo Description
id string Id. de dispositivo
displayName string Nombre para mostrar del dispositivo
enabled boolean Estado habilitado del dispositivo
provisioned boolean Estado aprovisionado del dispositivo
simulated boolean Estado simulado del dispositivo
template string Identificador de la plantilla de dispositivo
scopes string Identificador de la organización

Funciones admitidas de filter:

Actualmente, la única función de filtro admitida para las listas de dispositivos es la función contains:

filter=contains(displayName, 'device1')

En el siguiente ejemplo se muestra cómo recuperar todos los dispositivos cuyo nombre para mostrar contiene la cadena thermostat:

GET https://{your app subdomain}/api/deviceTemplates?api-version=2022-10-31-preview&filter=contains(displayName, 'thermostat')

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "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

Use orderby para ordenar los resultados. Actualmente, orderby solo permite ordenar por displayName. De forma predeterminada, orderby muestra los resultados en orden ascendente. Use desc para que se muestren en orden descendente, por ejemplo:

orderby=displayName
orderby=displayName desc

En el siguiente ejemplo se muestra cómo recuperar todas las plantillas de dispositivo en las que el resultado está ordenado por displayName:

GET https://{your app subdomain}/api/devices?api-version=2022-10-31-preview&orderby=displayName

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "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
        }
    ]
}

También puede combinar dos o más filtros.

En el siguiente ejemplo se muestra cómo recuperar los tres dispositivos principales cuyo nombre para mostrar contiene la cadena Thermostat.

GET https://{your app subdomain}/api/deviceTemplates?api-version=2022-10-31-preview&filter=contains(displayName, 'Thermostat')&maxpagesize=3

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "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"
}

Grupos de dispositivos

Puede crear grupos de dispositivos en una aplicación IoT Central para supervisar los datos agregados, usarlos con trabajos y administrar el acceso. Los grupos de dispositivos se definen mediante un filtro que selecciona los dispositivos que se van a agregar al grupo. Puede crear grupos de dispositivos en el portal de IoT Central o mediante la API.

Incorporación de un grupo de dispositivos

Use la siguiente solicitud para crear un nuevo grupo de dispositivos.

PUT https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31

Al crear un grupo de dispositivos, se define un objeto filter que selecciona los dispositivos que se van a agregar al grupo. Un elemento filter identifica una plantilla de dispositivo y cualquier propiedad que coincida. En el ejemplo siguiente, se crea un grupo de dispositivos que contiene todos los dispositivos asociados a la plantilla "dtmi:modelDefinition:dtdlv2", donde la propiedad provisioned es true.

{
  "displayName": "Device group 1",
  "description": "Custom device group.",
  "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
  "organizations": [
    "seattle"
  ]
}

El cuerpo de la solicitud tiene algunos campos obligatorios:

  • @displayName: nombre para mostrar del grupo de dispositivos.
  • @filter: consulta que define qué dispositivos deben estar en este grupo.
  • @etag: ETag se usa para evitar conflictos en las actualizaciones del dispositivo.
  • description: breve resumen del grupo de dispositivos.

El campo organizaciones solo se usa cuando una aplicación tiene una jerarquía de organización definida. Para más información sobre las organizaciones, consulte Administración de las organizaciones de IoT Central.

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "id": "group1",
  "displayName": "Device group 1",
  "description": "Custom device group.",
  "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
  "organizations": [
    "seattle"
  ]
}

Obtención de un grupo de dispositivos

Use la siguiente solicitud para recuperar detalles de un grupo de dispositivos desde la aplicación:

GET https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31
  • deviceGroupId: identificador único para el grupo de dispositivos.

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "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"
  ]
}

Actualización de un grupo de dispositivos

PATCH https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31

El cuerpo de la solicitud de ejemplo es similar al siguiente ejemplo, que actualiza displayName en el grupo de dispositivos:

{
  "displayName": "New group name"
}

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "id": "group1",
  "displayName": "New group name",
  "description": "Custom device group.",
  "filter": "SELECT * FROM devices WHERE $template = \"dtmi:modelDefinition:dtdlv2\" AND $provisioned = true",
  "organizations": [
    "seattle"
  ]
}

Eliminación de un grupo de dispositivos

Use la siguiente solicitud para eliminar un grupo de dispositivos:

DELETE https://{your app subdomain}/api/deviceGroups/{deviceGroupId}?api-version=2022-07-31

Enumeración de grupos de dispositivos

Use la siguiente solicitud para recuperar una lista de grupos de dispositivos de la aplicación:

GET https://{your app subdomain}/api/deviceGroups?api-version=2022-07-31

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "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\""
    }
  ]
}

Grupos de inscripción

Los grupos de inscripción se usan para administrar las opciones de autenticación de los dispositivos en la aplicación de IoT Central. Para más información, consulte Conceptos de autenticación de dispositivos en IoT Central.

Para información sobre la creación y la administración de grupos de inscripción en la interfaz de usuario, consulte Conexión de dispositivos con certificados X.509 a la aplicación de IoT Central.

Creación de un grupo de inscripción

Al crear un grupo de inscripción para dispositivos que usan certificados X.509, primero debe cargar el certificado raíz o intermedio en la aplicación de IoT Central.

Generación de certificados raíz y de dispositivo

En esta sección generará los certificados X.509 que necesita para conectar un dispositivo a IoT Central.

Advertencia

Esta forma de generar certificados X.509 es solo para pruebas. En un entorno de producción, debe usar su mecanismo oficial y seguro para la generación de certificados.

  1. Vaya al script del generador de certificados en el SDK de Microsoft Azure IoT para Node.js que descargó. Instale los paquetes necesarios:

    cd azure-iot-sdk-node/provisioning/tools
    npm install
    
  2. Cree un certificado raíz y luego derive un certificado de dispositivo mediante la ejecución del script:

    node create_test_cert.js root mytestrootcert
    node create_test_cert.js device sample-device-01 mytestrootcert
    

    Sugerencia

    Un identificador de dispositivo puede contener letras, números y el carácter -.

Estos comandos producen los siguientes certificados raíz y de dispositivo:

filename contenido
mytestrootcert_cert.pem Parte pública del certificado X.509 raíz
mytestrootcert_key.pem Clave privada del certificado X.509 raíz
mytestrootcert_fullchain.pem Cadena de claves completa del certificado X.509 raíz
mytestrootcert.pfx Archivo PFX del certificado X509 raíz
sampleDevice01_cert.pem Parte pública del certificado X.509 de dispositivo
sampleDevice01_key.pem Clave privada del certificado X.509 de dispositivo
sampleDevice01_fullchain.pem Cadena de claves completa del certificado X.509 de dispositivo
sampleDevice01.pfx Archivo PFX del certificado X509 de dispositivo

Tome nota de la ubicación de estos archivos. Lo necesitará más adelante.

Generación de la versión codificada en base 64 del certificado raíz

En la carpeta de la máquina local que contiene los certificados que generó, cree un archivo denominado convert.js y agregue el siguiente contenido de JavaScript:

const fs = require('fs')
const fileContents = fs.readFileSync(process.argv[2]).toString('base64');
console.log(fileContents);

Ejecute el siguiente comando para generar una versión de codificación en base 64 del certificado:

node convert.js mytestrootcert_cert.pem

Anote la versión codificada en base 64 del certificado. Lo necesitará más adelante.

Incorporación de un grupo de inscripción X.509

Use la siguiente solicitud para crear un grupo de inscripción con myx509eg como identificador:

PUT https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg?api-version=2022-07-31

En el ejemplo siguiente se muestra un cuerpo de solicitud que agrega un nuevo grupo de inscripción X.509:

{
  "displayName": "My group",
  "enabled": true,
  "type": "iot",
  "attestation": {
    "type": "x509"
  }
}

El cuerpo de la solicitud tiene algunos campos obligatorios:

  • @displayName: nombre para mostrar del grupo de inscripción.
  • @enabled: indica si los dispositivos que usan el grupo pueden conectarse a IoT Central.
  • @type: tipo de dispositivos que se conectan mediante el grupo, ya sea iot o iotEdge.
  • attestation: mecanismo de atestación para el grupo de inscripción, ya sea symmetricKey o x509.

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "id": "myEnrollmentGroupId",
    "displayName": "My group",
    "enabled": true,
    "type": "iot",
    "attestation": {
        "type": "x509",
        "x509": {
            "signingCertificates": {}
        }
    },
    "etag": "IjdiMDcxZWQ5LTAwMDAtMDcwMC0wMDAwLTYzMWI3MWQ4MDAwMCI="
}

Incorporación de un certificado X.509 a un grupo de inscripción

Use la siguiente solicitud para establecer el certificado X.509 principal del grupo de inscripción myx509eg:

PUT https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary?api-version=2022-07-31

Use esta solicitud para agregar un certificado X.509 principal o secundario al grupo de inscripción.

En el ejemplo siguiente se muestra un cuerpo de solicitud que agrega un certificado X.509 a un grupo de inscripción:

{
  "verified": false,
  "certificate": "<base64-certificate>"
}
  • certificate: la versión en base 64 del certificado que anotó anteriormente.
  • verified: true si atestigua que el certificado es válido, false si necesita demostrar su validez.

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "verified": false,
  "info": {
    "sha1Thumbprint": "644543467786B60C14DFE6B7C968A1990CF63EAC"
  },
  "etag": "IjE3MDAwODNhLTAwMDAtMDcwMC0wMDAwLTYyNjFmNzk0MDAwMCI="
}

Generación de código de verificación para un certificado X.509

Use la siguiente solicitud para generar un código de verificación para el certificado X.509 principal o secundario de un grupo de inscripción.

Si se establece verified en false en la solicitud anterior, use la siguiente solicitud para generar un código de verificación para el certificado X.509 principal en el grupo de inscripción myx509eg:

POST https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary/generateVerificationCode?api-version=2022-07-31

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "verificationCode": "<certificate-verification-code>"
}

Tome nota de la contraseña, ya que la necesitará en el próximo paso.

Generación del certificado de verificación

Use el siguiente comando para generar un certificado de verificación a partir del código de verificación del paso anterior:

node create_test_cert.js verification --ca mytestrootcert_cert.pem --key mytestrootcert_key.pem --nonce  {verification-code}

Ejecute el comando siguiente para generar una versión codificada en base 64 del certificado:

node convert.js verification_cert.pem

Anote la versión codificada en base 64 del certificado. Lo necesitará más adelante.

Comprobación del certificado X.509 de un grupo de inscripción

Use la siguiente solicitud para comprobar el certificado X.509 principal del grupo de inscripción myx509eg proporcionando el certificado con el código de verificación firmado:

POST PUT https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary/verify?api-version=2022-07-31

En el ejemplo siguiente se muestra un cuerpo de solicitud que comprueba un certificado X.509:

{
  "certificate": "base64-verification-certificate"
}

Obtención del certificado X.509 de un grupo de inscripción

Use la siguiente solicitud para recuperar los detalles del certificado X.509 de un grupo de inscripción de la aplicación:

GET https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary?api-version=2022-07-31

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "verified": true,
  "info": {
    "sha1Thumbprint": "644543467786B60C14DFE6B7C968A1990CF63EAC"
  },
  "etag": "IjE3MDAwODNhLTAwMDAtMDcwMC0wMDAwLTYyNjFmNzk0MDAwMCI="
}

Eliminación de un certificado X.509 de un grupo de inscripción

Use la siguiente solicitud para eliminar el certificado X.509 principal de un grupo de inscripción con el identificador myx509eg:

DELETE https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg/certificates/primary?api-version=2022-07-31

Obtención de un grupo de inscripción

Use la siguiente solicitud para recuperar los detalles de un grupo de inscripción con mysymmetric como identificador:

GET https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/mysymmetric?api-version=2022-07-31

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "id": "mysymmetric",
  "displayName": "My group",
  "enabled": true,
  "type": "iot",
  "attestation": {
    "type": "symmetricKey",
    "symmetricKey": {
      "primaryKey": "<primary-symmetric-key>",
      "secondaryKey": "<secondary-symmetric-key>"
    }
  },
  "etag": "IjA4MDUwMTJiLTAwMDAtMDcwMC0wMDAwLTYyODJhOWVjMDAwMCI="
}

Actualización de un grupo de inscripción

Use la siguiente solicitud para actualizar un grupo de inscripción.

PATCH https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg?api-version=2022-07-31

En el ejemplo siguiente se muestra un cuerpo de solicitud que actualiza el nombre para mostrar de un grupo de inscripciones:

{
  "displayName": "My new group name",
}

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
  "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="
}

Eliminación de un grupo de inscripción

Use la siguiente solicitud para eliminar un grupo de inscripción con el identificador myx509eg:

DELETE https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups/myx509eg?api-version=2022-07-31

Enumeración de los grupos de inscripción

Use la siguiente solicitud para recuperar una lista de los grupos de dispositivos de la aplicación:

GET https://{your app subdomain}.azureiotcentral.com/api/enrollmentGroups?api-version=2022-07-31

La respuesta a esta solicitud es similar al ejemplo siguiente:

{
    "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="
        }
    ]
}