Använda X.509-certifikat via HTTPS utan SDK

I den här artikeln ska du etablera en enhet med x.509-certifikat via HTTPS utan att använda en Azure IoT DPS-enhets-SDK. De flesta språk tillhandahåller bibliotek för att skicka HTTP-begäranden, men i stället för att fokusera på ett visst språk använder du i den här artikeln cURL-kommandoradsverktyget för att skicka och ta emot via HTTPS.

Du kan följa stegen i den här artikeln på en Linux- eller Windows-dator. Om du kör på Windows-undersystem för Linux (WSL) eller körs på en Linux-dator kan du ange alla kommandon i det lokala systemet i en Bash-prompt. Om du kör i Windows anger du alla kommandon i det lokala systemet i en GitBash-prompt.

Det finns flera sökvägar i den här artikeln beroende på vilken typ av registreringspost och X.509-certifikat du väljer att använda. När du har installerat förhandskraven måste du läsa översikten innan du fortsätter.

Krav

  • Om du inte har en Azure-prenumeration kan du skapa ett kostnadsfritt konto innan du börjar.

  • Slutför stegen i Konfigurera IoT Hub Device Provisioning Service med Azure Portal.

  • Kontrollera att Python 3.7 eller senare är installerat på datorn. Du kan kontrollera din version av Python genom att köra python --version eller python3 --version.

  • Om du kör i Windows installerar du den senaste versionen av Git. Kontrollera att Git har lagts till i de miljövariabler som är tillgängliga för kommandofönstret. Se Software Freedom Conservancys Git-klientverktyg för den senaste versionen av git verktyg som ska installeras, vilket inkluderar Git Bash, kommandoradsappen som du kan använda för att interagera med din lokala Git-lagringsplats. I Windows anger du alla kommandon i det lokala systemet i en GitBash-prompt.

  • Azure CLI. Du har två alternativ för att köra Azure CLI-kommandon i den här artikeln:

    • Använd Azure Cloud Shell, ett interaktivt gränssnitt som kör CLI-kommandon i webbläsaren. Det här alternativet rekommenderas eftersom du inte behöver installera något. Om du använder Cloud Shell för första gången loggar du in på Azure Portal. Följ stegen i Cloud Shell snabbstart till Starta Cloud Shell och Välj Bash-miljön.
    • Du kan också köra Azure CLI på din lokala dator. Om Azure CLI redan är installerat kör du az upgrade för att uppgradera CLI och tillägg till den aktuella versionen. Information om hur du installerar Azure CLI finns i Installera Azure CLI.
  • Om du kör i en Linux- eller WSL-miljö öppnar du en Bash-prompt för att köra kommandon lokalt. Om du kör i en Windows-miljö öppnar du en GitBash-prompt.

Översikt

Det finns tre scenarier som beskrivs i den här artikeln och de första stegen som du utför kommer att vara olika för var och en. Om du vill:

När du har slutfört stegen för det valda scenariot kan du fortsätta att registrera enheten och skicka ett telemetrimeddelande.

Skapa ett enhetscertifikat

I den här artikeln använder du ett X.509-certifikat för att autentisera med DPS med hjälp av antingen en enskild registrering eller en registreringsgrupp.

Om du använder en enskild registrering kan du använda ett självsignerat X.509-certifikat eller en certifikatkedja som består av enhetscertifikatet plus ett eller flera signeringscertifikat. Om du använder en registreringsgrupp måste du använda en certifikatkedja.

Viktigt

För X.509-registreringsautentisering används ämnesnamnet (CN) för enhetscertifikatet som registrerings-ID för enheten. Registrerings-ID:t är en skiftlägesokänslig sträng med alfanumeriska tecken plus specialtecken: '-', '.', '_', . ':' Det sista tecknet måste vara alfanumeriskt eller streck ('-'). DPS stöder registrerings-ID:t på upp till 128 tecken. Ämnesnamnet för ett X.509-certifikat är dock begränsat till 64 tecken. Om du ändrar ämnesnamnet för enhetscertifikatet i följande steg kontrollerar du att det följer det här formatet.

Använd ett självsignerat certifikat

Om du vill skapa ett självsignerat certifikat som ska användas med en enskild registrering navigerar du till en katalog där du vill skapa certifikatet och följer dessa steg:

  1. Kör följande kommando:

    winpty openssl req -outform PEM -x509 -sha256 -newkey rsa:4096 -keyout device-key.pem -out device-cert.pem -days 30 -extensions usr_cert -addext extendedKeyUsage=clientAuth -subj "//CN=my-x509-device"
    

    Viktigt

    Det extra snedstrecket som anges för ämnesnamnet (//CN=my-x509-device) krävs bara för att undkomma strängen med Git på Windows-plattformar.

  2. När du uppmanas att ange PEM-lösenfras:, använd lösenfrasen 1234.

  3. När du tillfrågas Verifiera – Ange PEM-lösenfras:, använd frasen 1234 igen.

    En certifikatfil för offentlig nyckel (device-cert.pem) och en privat nyckelfil (device-key.pem) ska nu genereras i katalogen där du körde openssl kommandot.

    Certifikatfilen har sitt ämnesnamn (CN) inställt på my-x509-device.

    Den privata nyckelfilen skyddas av frasen pass: 1234.

  4. Certifikatfilen är Base64-kodad. Om du vill visa ämnesnamnet (CN) och andra egenskaper för certifikatfilen anger du följande kommando:

    winpty openssl x509 -in device-cert.pem -text -noout
    
    Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            77:3e:1d:e4:7e:c8:40:14:08:c6:09:75:50:9c:1a:35:6e:19:52:e2
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: CN = my-x509-device
        Validity
            Not Before: May  5 21:41:42 2022 GMT
            Not After : Jun  4 21:41:42 2022 GMT
        Subject: CN = my-x509-device
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (4096 bit)
                Modulus:
                    00:d2:94:37:d6:1b:f7:43:b4:21:c6:08:1a:d6:d7:
                    e6:40:44:4e:4d:24:41:6c:3e:8c:b2:2c:b0:23:29:
                    ...
                    23:6e:58:76:45:18:03:dc:2e:9d:3f:ac:a3:5c:1f:
                    9f:66:b0:05:d5:1c:fe:69:de:a9:09:13:28:c6:85:
                    0e:cd:53
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
            X509v3 Authority Key Identifier:
                keyid:63:C0:B5:93:BF:29:F8:57:F8:F9:26:44:70:6F:9B:A4:C7:E3:75:18
    
            X509v3 Extended Key Usage:
                TLS Web Client Authentication
    Signature Algorithm: sha256WithRSAEncryption
         82:8a:98:f8:47:00:85:be:21:15:64:b9:22:b0:13:cc:9e:9a:
         ed:f5:93:b9:4b:57:0f:79:85:9d:89:47:69:95:65:5e:b3:b1:
         ...
         cc:b2:20:9a:b7:f2:5e:6b:81:a1:04:93:e9:2b:92:62:e0:1c:
         ac:d2:49:b9:36:d2:b0:21
    

Använda en certifikatkedja

Om du använder en registreringsgrupp måste du autentisera med en certifikatkedja. Med en enskild registrering kan du använda en certifikatkedja eller ett självsignerat certifikat.

Om du vill skapa en certifikatkedja följer du anvisningarna i Skapa en X.509-certifikatkedja. Du behöver bara en enhet för den här artikeln, så du kan sluta när du har skapat den privata nyckeln och certifikatkedjan för den första enheten.

När du är klar bör du ha följande filer:

Certifikat Fil Beskrivning
rotcertifikatutfärdarcertifikat. certs/azure-iot-test-only.root.ca.cert.pem Laddas upp till DPS och verifieras.
mellanliggande CA-certifikat certs/azure-iot-test-only.intermediate.cert.pem Används för att skapa en registreringsgrupp i DPS.
privat nyckel för device-01 private/device-01.key.pem Används av enheten för att verifiera ägarskapet för enhetscertifikatet under autentisering med DPS.
device-01-certifikat certs/device-01.cert.pem Används för att skapa en enskild registreringspost med DPS.
fullständigt kedjecertifikat för device-01 certs/device-01-full-chain.cert.pem Presenteras av enheten för att autentisera och registrera med DPS.

Använda en enskild registrering

Om du vill skapa en enskild registrering som ska användas för den här artikeln använder du kommandot az iot dps enrollment create .

Följande kommando skapar en enskild registreringspost med standardallokeringsprincipen för DPS-instansen med det enhetscertifikat som du anger.

az iot dps enrollment create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --attestation-type x509 --certificate-path {path to your certificate}
  • Ersätt namnet på resursgruppen och DPS-instansen.

  • Registrerings-ID:t är registrerings-ID:t för din enhet och för X.509-registreringar måste det matcha det gemensamma ämnesnamnet (CN) för enhetscertifikatet.

  • Certifikatsökvägen är sökvägen till ditt enhetscertifikat.

Anteckning

Om du använder Cloud Shell för att köra Azure CLI-kommandon kan du använda uppladdningsknappen för att ladda upp certifikatfilen till molnenheten innan du kör kommandot.

Skärmbild som visar knappen Ladda upp fil i Azure Cloud Shell.

Använda en registreringsgrupp

Om du vill skapa en registreringsgrupp som ska användas för den här artikeln använder du kommandot az iot dps enrollment-group create .

Följande kommando skapar en registreringsgrupppost med standardallokeringsprincipen för DPS-instansen med hjälp av ett mellanliggande CA-certifikat:

az iot dps enrollment-group create -g {resource_group_name} --dps-name {dps_name} --enrollment-id {enrollment_id} --certificate-path {path_to_your_certificate}
  • Ersätt namnet på resursgruppen och DPS-instansen.

  • Registrerings-ID:t är en skiftlägeskänslig sträng med alfanumeriska tecken plus specialtecknen: '-', '.', '_', ':'. Det sista tecknet måste vara alfanumeriskt eller streck ('-'). Det kan vara valfritt namn som du väljer att använda för registreringsgruppen.

  • Certifikatsökvägen är sökvägen till ditt mellanliggande certifikat. Om du följde anvisningarna i Använda en certifikatkedja är filnamnet certs/azure-iot-test-only.intermediate.cert.pem.

Anteckning

Om du använder Cloud Shell för att köra Azure CLI-kommandon kan du använda uppladdningsknappen för att ladda upp certifikatfilen till molnenheten innan du kör kommandot.

Skärmbild som visar knappen Ladda upp fil i Azure Cloud Shell.

Anteckning

Om du vill kan du skapa en registreringsgrupp baserat på ett signeringscertifikat som tidigare har laddats upp och verifierats med DPS (se nästa avsnitt). Det gör du genom att ange certifikatnamnet med --ca-name och utelämna parametern --certificate-pathaz iot dps enrollment-group create i kommandot .

Ladda upp och verifiera ett signeringscertifikat

Om du använder en certifikatkedja för antingen en enskild registrering eller en registreringsgrupp måste du ladda upp och verifiera minst ett certifikat i enhetscertifikatets signeringskedja till DPS.

  • För en enskild registrering kan detta vara valfritt signeringscertifikat i enhetens certifikatkedja.

  • För en registreringsgrupp kan detta vara certifikatet som angetts för registreringsgruppen eller ett certifikat i dess signeringskedja fram till och med rotcertifikatutfärdarcertifikatet.

Om du vill ladda upp och verifiera certifikatet använder du kommandot az iot dps certificate create :

az iot dps certificate create -g {resource_group_name} --dps-name {dps_name} --certificate-name {friendly_name_for_your_certificate} --path {path_to_your_certificate} --verified true
  • Ersätt namnet på resursgruppen och DPS-instansen.

  • Certifikatsökvägen är sökvägen till ditt signeringscertifikat. I den här artikeln rekommenderar vi att du laddar upp rotcertifikatutfärdarcertifikatet. Om du följde anvisningarna i Använd en certifikatkedja är filnamnet certs/azure-iot-test-only.root.ca.cert.pem.

  • Certifikatnamnet får endast innehålla alfanumeriska tecken eller följande specialtecken: -._. Inget tomt utrymme tillåts. Till exempel "azure-iot-test-only-root".

Anteckning

Om du använder Cloud Shell för att köra Azure CLI-kommandon kan du använda uppladdningsknappen för att ladda upp certifikatfilen till molnenheten innan du kör kommandot.

Skärmbild som visar knappen Ladda upp fil i Azure Cloud Shell.

Anteckning

Stegen i det här avsnittet verifierade automatiskt certifikatet vid uppladdning. Du kan också utföra manuell verifiering av certifikatet. Mer information finns i Manuell verifiering av mellanliggande certifikatutfärdare eller rotcertifikatutfärdare.

Registrera din enhet

Du anropar REST-API:et Registrera enhet för att etablera enheten via DPS.

Använd följande curl-kommando:

curl -L -i -X PUT --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "[registration_id]"}' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31

Plats:

  • -L instruerar curl att följa HTTP-omdirigeringar.

  • –i instruerar curl att inkludera protokollrubriker i utdata. Dessa rubriker är inte absolut nödvändiga, men de kan vara användbara.

  • -X PUT anger för curl att det här är ett HTTP PUT-kommando. Krävs för det här API-anropet.

  • --cert [path_to_your_device_cert] anger var enhetens X.509-certifikat ska hittas. Om enhetens privata nyckel skyddas av en lösenfras kan du lägga till frasen efter certifikatsökvägen som föregås av ett kolon, till exempel: --cert my-device.pem:1234.

    • Om du använder ett självsignerat certifikat innehåller enhetscertifikatfilen bara ett enda X.509-certifikat. Om du följde anvisningarna i Använd ett självsignerat certifikat är filnamnet device-cert.pem och den privata nyckellösenfrasen är 1234, så använd --cert device-cert.pem:1234.

    • Om du till exempel använder en certifikatkedja när du autentiserar via en registreringsgrupp måste enhetens certifikatfil innehålla en giltig certifikatkedja. Certifikatkedjan måste innehålla enhetscertifikatet och eventuella signeringscertifikat fram till och med ett verifierat certifikat. Om du följde anvisningarna i Använd en certifikatkedja för att skapa certifikatkedjan är filsökvägen certs/device-01-full-chain.cert.pem, så använd --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] anger var enhetens privata nyckel ska hittas.

  • -H 'Content-Type: application/json' meddelar DPS att vi publicerar JSON-innehåll och måste vara "application/json"

  • -H 'Content-Encoding: utf-8' anger för DPS vilken kodning vi använder för meddelandetexten. Ange till rätt värde för ditt operativsystem/klient. Men det är i allmänhet utf-8.

  • -d '{"registrationId": "[registration_id]"}'är parametern –d "data" eller brödtexten i det meddelande som vi publicerar. Det måste vara JSON i form av {"registrationId":"[registration_id"}". Observera att för curl är den omsluten med enkla citattecken; Annars måste du undvika de dubbla citattecknarna i JSON. För X.509-registrering är registrerings-ID:t ämnesnamnet (CN) för ditt enhetscertifikat.

  • Slutligen är den sista parametern url:en att publicera till. För "vanlig" (dvs. inte lokal) DPS används den globala DPS-slutpunkten global.azure-devices-provisioning.net : https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/register?api-version=2019-03-31. Observera att du måste ersätta [dps_scope_id] och [registration_id] med lämpliga värden.

Exempel:

  • Om du följde anvisningarna i Använda ett självsignerat certifikat:

    curl -L -i -X PUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "my-x509-device"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register?api-version=2021-06-01
    
  • Om du följde anvisningarna i Använd en certifikatkedja:

    curl -L -i -X PUT --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"registrationId": "device-01"}' https://global.azure-devices-provisioning.net/0ne00111111/registrations/device-01/register?api-version=2021-06-01
    

Ett lyckat anrop har ett svar som liknar följande:

HTTP/1.1 202 Accepted
Date: Sat, 27 Aug 2022 17:53:18 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Location: https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/register
Retry-After: 3
x-ms-request-id: 05cdec07-c0c7-48f3-b3cd-30cfe27cbe57
Strict-Transport-Security: max-age=31536000; includeSubDomains

{"operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a","status":"assigning"}

Svaret innehåller ett åtgärds-ID och en status. I det här fallet är statusen inställd på assigning. DPS-registrering är potentiellt en tidskrävande åtgärd, så den görs asynkront. Normalt söker du efter status med rest-API:et för åtgärdsstatussökning för att avgöra när enheten har tilldelats eller om ett fel har inträffat.

Giltiga statusvärden för DPS är:

  • assigned: returvärdet från statusanropet anger vilken IoT Hub enheten tilldelades till.

  • assigning: åtgärden körs fortfarande.

  • disabled: registreringsposten är inaktiverad i DPS, så enheten kan inte tilldelas.

  • failed: tilldelningen misslyckades. Det kommer att finnas en errorCode och errorMessage returneras i en registrationState post i svaret för att ange vad som misslyckades.

  • unassigned

Om du vill anropa API:et för åtgärdsstatussökning använder du följande curl-kommando:

curl -L -i -X GET --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/[dps_id_scope]/registrations/[registration_id]/operations/[operation_id]?api-version=2019-03-31

Du använder samma ID-omfång, registrerings-ID och certifikat och nyckel som du gjorde i begäran Registrera enhet . Använd åtgärds-ID:t som returnerades i svaret Registrera enhet .

Följande kommando är till exempel för det självsignerade certifikatet som skapades i Använda ett självsignerat certifikat. (Du måste ändra ID-omfånget och åtgärds-ID:t.)

curl -L -i -X GET --cert ./device-certPUT --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' https://global.azure-devices-provisioning.net/0ne00111111/registrations/my-x509-device/operations/5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a?api-version=2021-06-01

Följande utdata visar svaret för en enhet som har tilldelats. Observera att status egenskapen är assigned och att registrationState.assignedHub egenskapen är inställd på den IoT-hubb där enheten etablerades.

HTTP/1.1 200 OK
Date: Sat, 27 Aug 2022 18:10:49 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
x-ms-request-id: 8f211bc5-3ed8-4c8b-9a79-e003e756e9e4
Strict-Transport-Security: max-age=31536000; includeSubDomains

{
   "operationId":"5.506603669bd3e2bf.b3602f8f-76fe-4341-9214-bb6cfb891b8a",
   "status":"assigned",
   "registrationState":{
      "x509":{
         
      },
      "registrationId":"my-x509-device",
      "createdDateTimeUtc":"2022-08-27T17:53:19.5143497Z",
      "assignedHub":"MyExampleHub.azure-devices.net",
      "deviceId":"my-x509-device",
      "status":"assigned",
      "substatus":"initialAssignment",
      "lastUpdatedDateTimeUtc":"2022-08-27T17:53:19.7519141Z",
      "etag":"IjEyMDA4NmYyLTAwMDAtMDMwMC0wMDAwLTYzMGE1YTBmMDAwMCI="
   }
}

Anteckna enhets-ID:t och den tilldelade IoT-hubben. Du använder dem för att skicka ett telemetrimeddelande i nästa avsnitt.

Skicka ett telemetrimeddelande

Du anropar REST-API:et IoT Hub Skicka enhetshändelse för att skicka telemetri till enheten.

Använd följande curl-kommando:

curl -L -i -X POST --cert [path_to_your_device_cert] --key [path_to_your_device_private_key] -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13

Plats:

  • -X POST anger för curl att det här är ett HTTP POST-kommando. Krävs för det här API-anropet.

  • --cert [path_to_your_device_cert] anger var enhetens X.509-certifikat ska hittas. Om enhetens privata nyckel skyddas av en lösenfras kan du lägga till frasen efter certifikatsökvägen som föregås av ett kolon, till exempel: --cert my-device.pem:1234.

    • Om du använder ett självsignerat certifikat innehåller enhetscertifikatfilen bara ett enda X.509-certifikat. Om du följde anvisningarna i Använd ett självsignerat certifikat är filnamnet device-cert.pem och den privata nyckellösenfrasen är 1234, så använd --cert device-cert.pem:1234.

    • Om du använder en certifikatkedja måste enhetens certifikatfil innehålla en giltig certifikatkedja. Om du följde anvisningarna i Använd en certifikatkedja för att skapa certifikatkedjan är filsökvägen certs/device-01-full-chain.cert.pem, så använd --cert certs/device-01-full-chain.cert.pem.

  • --key [path_to_your_device_private_key] anger var enhetens privata nyckel ska hittas.

  • -H 'Content-Type: application/json'meddelar IoT Hub vi publicerar JSON-innehåll och måste vara "application/json".

  • -H 'Content-Encoding: utf-8'anger IoT Hub kodningen som vi använder för meddelandetexten. Ange till rätt värde för ditt operativsystem/klient. Men det är i allmänhet utf-8.

  • -d '{"temperature": 30}'är parametern –d "data" eller brödtexten i det meddelande som vi publicerar. I den här artikeln publicerar vi en enda temperaturdatapunkt. Innehållstypen angavs som application/json, så för den här begäran är brödtexten JSON. Observera att för curl är den omsluten med enkla citattecken; Annars måste du undvika de dubbla citattecknarna i JSON.

  • Den sista parametern är url:en som du vill publicera till. För API:et Skicka enhetshändelse är URL:en: https://[assigned_iot_hub_name].azure-devices.net/devices/[device_id]/messages/events?api-version=2020-03-13.

    • Ersätt [assigned_iot_hub_name] med namnet på den IoT-hubb som enheten har tilldelats till.

    • Ersätt [device_id] med det enhets-ID som tilldelades när du registrerade enheten. För enheter som etablerar via registreringsgrupper blir enhets-ID:t registrerings-ID:t. För enskilda registreringar kan du, om du vill, ange ett enhets-ID som skiljer sig från registrerings-ID:t i registreringsposten.

Exempel:

  • Om du följde anvisningarna i Använda ett självsignerat certifikat:

    curl -L -i -X POST --cert device-cert.pem:1234 --key device-key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    
  • Om du följde anvisningarna i Använd en certifikatkedja:

    curl -L -i -X POST --cert certs/device-01-full-chain.cert.pem --key private/device-01.key.pem -H 'Content-Type: application/json' -H 'Content-Encoding:  utf-8' -d '{"temperature": 30}' https://MyExampleHub.azure-devices.net/devices/my-x509-device/messages/events?api-version=2020-03-13
    

Ett lyckat anrop har ett svar som liknar följande:

HTTP/1.1 204 No Content
Content-Length: 0
Vary: Origin
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: aa58c075-20d9-4565-8058-de6dc8524f14
Date: Wed, 31 Aug 2022 18:34:44 GMT

Nästa steg