Jak vygenerovat adresu URL přístupu klienta pro klienty

Klient, ať už jde o prohlížeč 💻, mobilní aplikaci 📱nebo zařízení 💡IoT, používá adresu URL klientského přístupu k připojení a ověření s vaším prostředkem.

Adresa URL se řídí následujícím vzorem:

  • Pro klienty MQTT je to wss://<service_name>.webpubsub.azure.com/clients/mqtt/hubs/<hub_name>?access_token=<token>.
  • Pro všechny ostatní klienty je to wss://<service_name>.webpubsub.azure.com/client/hubs/<hub_name>?access_token=<token>.

Tento článek ukazuje několik způsobů, jak získat adresu URL klientského přístupu.

  • Rychlý start potřebujete tak, že ho zkopírujete z webu Azure Portal.
  • Pro vývoj vygenerujte hodnotu pomocí sady SDK serveru Web PubSub.
  • Pokud používáte Microsoft Entra ID, můžete také vyvolat rozhraní REST API pro generování tokenu klienta.

Kopírování z webu Azure Portal

Na kartě Klíče na webu Azure Portal je k dispozici nástroj Generátor adres URL klienta, který vám rychle vygeneruje adresu URL klientského přístupu, jak je znázorněno v následujícím diagramu. Tady zadané hodnoty se neukládají.

Všimněte si, že pro klienty MQTT byste měli vybrat "MQTT Client" v rozevírací nabídce před textovým polem Adresa URL klientského přístupu.

Snímek obrazovky s generátorem adres URL klienta Web PubSub

Generování ze sady SDK služby

Stejnou adresu URL klientského přístupu lze vygenerovat pomocí sady SDK serveru Web PubSub.

  1. Postupujte podle pokynů v části Začínáme se serverovou sadou SDK a vytvořte objekt.WebPubSubServiceClientservice

  2. Vygenerujte adresu URL klientského přístupu voláním WebPubSubServiceClient.getClientAccessToken:

    • Generování přístupového tokenu klienta

      // for web pubsub native clients
      let token = await serviceClient.getClientAccessToken();
      
      // for mqtt clients
      let token = await serviceClient.getClientAccessToken({ clientProtocol: "mqtt" });
      
    • Konfigurace ID uživatele

      let token = await serviceClient.getClientAccessToken({ userId: "user1" });
      
    • Konfigurace doby života tokenu

      let token = await serviceClient.getClientAccessToken({
        expirationTimeInMinutes: 5,
      });
      
    • Konfigurace role, která se může připojit ke skupině group1 přímo při připojení pomocí této adresy URL klientského přístupu

      let token = await serviceClient.getClientAccessToken({
        roles: ["webpubsub.joinLeaveGroup.group1"],
      });
      
    • Konfigurace role, kterou může klient odesílat zprávy do skupiny group1 přímo při připojení pomocí této adresy URL klientského přístupu

      let token = await serviceClient.getClientAccessToken({
        roles: ["webpubsub.sendToGroup.group1"],
      });
      
    • Nakonfigurujte skupinu group1 , ke které se klient připojí, jakmile se připojí pomocí této adresy URL klientského přístupu.

      let token = await serviceClient.getClientAccessToken({
        groups: ["group1"],
      });
      

V reálném kódu obvykle máme stranu serveru, která hostuje logiku vygenerující adresu URL klientského přístupu. Když přijde požadavek klienta, může strana serveru k ověření požadavku klienta použít obecný pracovní postup ověřování/autorizace. Adresu URL klientského přístupu můžou získat zpět pouze platné požadavky klientů.

Generování z rozhraní REST API :generateToken

Můžete také použít Microsoft Entra ID a vygenerovat token vyvoláním rozhraní REST API pro generování tokenu klienta.

Poznámka:

Web PubSub nedoporučuje vytvářet tokeny ID Microsoft Entra pro instanční objekty Microsoft Entra ID ručně. Důvodem je to, že každý token Microsoft Entra ID je krátkodobý, obvykle vyprší do jedné hodiny. Po této době musíte ručně vygenerovat náhradní token Microsoft Entra ID. Místo toho použijte naše sady SDK , které automaticky generují a nahrazují tokeny MICROSOFT Entra ID pro vás.

  1. Pokud chcete povolit MICROSOFT Entra ID, postupujte podle autorizace z aplikace .

  2. Získejte token Microsoft Entra.

  3. K vyvolání :generateTokenpoužijte token Microsoft Entra .

  4. Shromážděte následující informace:

    Název hodnoty Jak získat hodnotu
    TenantId TenantId je hodnota ID adresáře (tenanta) v podokně Přehled aplikace, kterou jste zaregistrovali.
    ClientId ClientId je hodnota ID aplikace (klienta) z podokna Přehled aplikace, kterou jste zaregistrovali.
    ClientSecret ClientSecret je hodnota tajného klíče klienta, který jste právě přidali v kroku 1.
  5. Získání tokenu MICROSOFT Entra ID z platformy Microsoft Identity Platform

    Pomocí nástroje CURL si ukážeme, jak vyvolat rozhraní REST API. Nástroj je součástí Windows 10/11 a nástroj můžete nainstalovat pomocí nástroje Install CURL.

    # set neccessory values, replace the placeholders with your actual values
    export TenantId=<your_tenant_id>
    export ClientId=<your_client_id>
    export ClientSecret=<your_client_secret>
    
    curl -X POST "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token" \
    -H "Content-Type: application/x-www-form-urlencoded" \
    --data-urlencode "grant_type=client_credentials" \
    --data-urlencode "client_id=$ClientId" \
    --data-urlencode "client_secret=$ClientSecret" \
    --data-urlencode "scope=https://webpubsub.azure.com/.default"
    
    

    Výše uvedený příkaz curl odešle požadavek POST do koncového bodu identity Microsoftu , aby získal token ID Microsoft Entra zpět. V odpovědi se v access_token poli zobrazí token ID Microsoft Entra. Zkopírujte a uložte si ji k pozdějšímu použití.

  6. Použití tokenu ID Microsoft Entra k vyvolání :generateToken

    # Replace the values in {} with your actual values.
    export Hostname={your_service_hostname}
    export Hub={your_hub}
    export Microsoft_Entra_Token={Microsoft_entra_id_token_from_previous_step}
    curl -X POST "https://$Hostname/api/hubs/$Hub/:generateToken?api-version=2024-01-01" \
    -H "Authorization: Bearer $Microsoft_Entra_Token" \
    -H "Content-Type: application/json"
    

    Pokud potřebujete vygenerovat token pro klienty MQTT, připojte clientType=mqtt parametr k adrese URL:

    export Hostname={your_service_hostname}
    export Hub={your_hub}
    export Microsoft_Entra_Token={Microsoft_entra_id_token_from_previous_step}
    curl -X POST "https://$Hostname/api/hubs/$Hub/:generateToken?api-version=2024-01-01&clientType=mqtt" \
    -H "Authorization: Bearer $Microsoft_Entra_Token" \
    -H "Content-Type: application/json"
    

    Po spuštění cURL příkazu by se měla zobrazit odpověď podobná této:

    {
      "token": "ABCDEFG.ABC.ABC"
    }