Dela via


Auktorisera begäranden till Azure SignalR Service-resurser med Microsoft Entra-program

Azure SignalR Service stöder Microsoft Entra-ID för auktorisering av begäranden med Microsoft Entra-program.

Den här artikeln beskriver hur du konfigurerar din resurs och kod för att autentisera begäranden till resursen med hjälp av ett Microsoft Entra-program.

Registrera ett program i Microsoft Entra ID

Det första steget är att registrera ett program i Microsoft Entra-ID:

När du har registrerat programmet kan du hitta värdena för program-ID och katalog-ID (klientorganisation) på programmets översiktssida. Dessa GUID:er kan vara användbara i följande steg.

Skärmbild av översiktsinformation för ett registrerat program.

Lägg till autentiseringsuppgifter

När du har registrerat en app kan du lägga till certifikat, klienthemligheter (en sträng) eller federerade identitetsuppgifter som autentiseringsuppgifter i din konfidentiella klientappregistrering. Autentiseringsuppgifter gör att ditt program kan autentiseras som sig självt, vilket inte kräver någon interaktion från en användare vid körning och används av konfidentiella klientprogram som har åtkomst till ett webb-API.

Lägg till rolltilldelningar i Azure Portal

Följande steg beskriver hur du tilldelar en SignalR App Server-roll till ett huvudnamn för tjänsten eller en hanterad identitet för en Azure SignalR Service-resurs. Detaljerade steg finns i Tilldela Azure-roller med hjälp av Azure-portalen.

Note

Du kan tilldela en roll till valfritt omfång, inklusive hanteringsgrupp, prenumeration, resursgrupp eller enskild resurs. Mer information om omfång finns i Förstå omfånget för Azure RBAC.

  1. I Azure Portal går du till din Azure SignalR Service-resurs.

  2. Välj Åtkomstkontroll (IAM) i det vänstra fönstret.

  3. Välj Lägg till>Lägg till rolltilldelning.

    Skärmbild som visar sidan för åtkomstkontroll och val för att lägga till en rolltilldelning.

  4. På fliken Roll väljer du SignalR App Server. Andra inbyggda Roller i Azure SignalR Service beror på ditt scenario.

    Role beskrivning Användningsfall
    SignalR App Server Åtkomst till DE API:er som skapar serveranslutningar och genererar nycklar. Används oftast för en appserver med en Azure SignalR-resurs som körs i standardläge.
    SignalR Service-ägare Fullständig åtkomst till alla API:er på dataplanet, inklusive REST-API:er, API:er som skapar serveranslutningar och DE API:er som genererar nycklar/token. Används för en förhandlingsserver med en Azure SignalR Service-resurs som körs i serverlöst läge. Det kräver både REST API-behörigheter och autentiserings-API-behörigheter.
    SignalR REST API-ägare Fullständig åtkomst till REST-API:er för dataplanet. Används för Azure SignalR Management SDK för att hantera anslutningar och grupper, men det gör inte serveranslutningar eller hanterar förhandlingsbegäranden.
    SignalR REST API-läsare Skrivskyddad åtkomst till dataplanets REST-API:er. Används när du skriver ett övervakningsverktyg som anropar skrivskyddade REST-API:er.
  5. Välj Nästa.

  6. För Microsoft Entra-program:

    1. På raden Tilldela åtkomst till väljer du Användare, grupp eller tjänstens huvudnamn.
    2. På raden Medlemmar, välj välja medlemmar och välj sedan identiteten i popup-fönstret.
  7. För hanterad identitet för Azure-resurser:

    1. På raden Tilldela åtkomst till väljer du Hanterad identitet.
    2. På raden Medlemmar, välj välj medlemmar och välj sedan applikationen i popup-fönstret.
  8. Välj Nästa.

  9. Granska din uppgift och välj sedan Granska + tilldela för att bekräfta rolltilldelningen.

Viktigt!

Nyligen tillagda rolltilldelningar kan ta upp till 30 minuter att propageras.

Mer information om hur du tilldelar och hanterar Azure-roller finns i:

Konfigurera Microsoft.Azure.SignalR-appserverns SDK för C#

Azure SignalR-server-SDK för C#

Azure SignalR Server SDK använder Azure.Identity-biblioteket för att generera token för att ansluta till resurser. Klicka här om du vill utforska detaljerade användningar.

Note

tenantId måste matcha tenantId för den klientorganisation där din SignalR-resurs finns.

Använda Microsoft Entra-program med certifikat

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");

    option.Endpoints = [
      new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

Använda Microsoft Entra-program med klienthemlighet

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential = new ClientSecretCredential("tenantId", "clientId", "clientSecret");

    option.Endpoints = [
      new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

Använda Microsoft Entra-program med federerad identitet

Om din organisation har inaktiverat användningen av klienthemlighet/certifikat kan du konfigurera programmet så att det litar på en hanterad identitet för autentisering.

Mer information om det finns i Konfigurera ett program att lita på en hanterad identitet (förhandsversion).

Note

Konfigurera ett program för att lita på en hanterad identitet är en förhandsversionsfunktion.

services.AddSignalR().AddAzureSignalR(option =>
{
    var msiCredential = new ManagedIdentityCredential("msiClientId");

    var credential = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
    {
        // Entra ID US Government: api://AzureADTokenExchangeUSGov
        // Entra ID China operated by 21Vianet: api://AzureADTokenExchangeChina
        var request = new TokenRequestContext([$"api://AzureADTokenExchange/.default"]);
        var response = await msiCredential.GetTokenAsync(request, ctoken).ConfigureAwait(false);
        return response.Token;
    });

    option.Endpoints = [
        new ServiceEndpoint(new Uri(), "https://<resource>.service.signalr.net"), credential);
    ];
});

Den här autentiseringsuppgiften använder den användartilldelade hanterade identiteten för att generera en clientAssertion och använda den för att byta ut mot en clientToken för autentisering.

De appClientId och tenantId ska vara det företagsprogram som du tillhandahållit i SignalR-resursens klientorganisation.

Använda flera slutpunkter

Autentiseringsuppgifterna kan vara olika för olika slutpunkter.

I det här exemplet ansluter Azure SignalR SDK till resource1 med klienthemlighet och ansluter till resource2 med certifikat.

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential1 = new ClientSecretCredential("tenantId", "clientId", "clientSecret");
    var credential2 = new ClientCertificateCredential("tenantId", "clientId", "path-to-cert");

    option.Endpoints = new ServiceEndpoint[]
    {
        new ServiceEndpoint(new Uri("https://<resource1>.service.signalr.net"), credential1),
        new ServiceEndpoint(new Uri("https://<resource2>.service.signalr.net"), credential2),
    };
});

Fler exempel finns i den här exempellänken

Azure SignalR Service-bindningar i Azure Functions

Azure SignalR Service-bindningar i Azure Functions använder programinställningar i portalen eller local.settings.json lokalt för att konfigurera Microsoft Entra-programidentiteter för åtkomst till dina Azure SignalR Service-resurser.

Först måste du ange tjänst-URI för Azure SignalR Service. Nyckeln för tjänstens URI är serviceUri. Det börjar med ett anslutningsnamnprefix (som standard är AzureSignalRConnectionString) och en avgränsare. Avgränsaren är ett understreck (__) i Azure Portal och ett kolon (:) i filen local.settings.json. Du kan anpassa anslutningsnamnet med hjälp av bindningsegenskapen ConnectionStringSetting. Fortsätt att läsa för att hitta exemplet.

Sedan väljer du om du vill konfigurera din Microsoft Entra-programidentitet i fördefinierade miljövariabler eller i SignalR-angivna variabler.

Konfigurera en identitet i fördefinierade miljövariabler

Se Miljövariabler för listan över fördefinierade miljövariabler. När du har flera tjänster rekommenderar vi att du använder samma programidentitet så att du inte behöver konfigurera identiteten för varje tjänst. Andra tjänster kan också använda dessa miljövariabler baserat på inställningarna för dessa tjänster.

Om du till exempel vill använda autentiseringsuppgifter för klienthemligheter konfigurerar du identiteten enligt följande i filen local.settings.json :

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
    "AZURE_CLIENT_ID": "...",
    "AZURE_CLIENT_SECRET": "...",
    "AZURE_TENANT_ID": "..."
  }
}

Lägg till inställningar på följande sätt i Azure Portal:

 <CONNECTION_NAME_PREFIX>__serviceUri=https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
AZURE_CLIENT_ID = ...
AZURE_TENANT_ID = ...
AZURE_CLIENT_SECRET = ...

Konfigurera en identitet i variabler som specificerats av SignalR

SignalR-angivna variabler delar samma nyckelprefix med serviceUri nyckeln. Här är listan över variabler som du kan använda:

  • clientId
  • clientSecret
  • tenantId

Här följer exempel på hur du använder autentiseringsuppgifter för klienthemligheter i local.settings.json-filen:

{
  "Values": {
    "<CONNECTION_NAME_PREFIX>:serviceUri": "https://<SIGNALR_RESOURCE_NAME>.service.signalr.net",
    "<CONNECTION_NAME_PREFIX>:clientId": "...",
    "<CONNECTION_NAME_PREFIX>:clientSecret": "...",
    "<CONNECTION_NAME_PREFIX>:tenantId": "..."
  }
}

Lägg till inställningar på följande sätt i Azure Portal:

<CONNECTION_NAME_PREFIX>__serviceUri = https://<SIGNALR_RESOURCE_NAME>.service.signalr.net
<CONNECTION_NAME_PREFIX>__clientId = ...
<CONNECTION_NAME_PREFIX>__clientSecret = ...
<CONNECTION_NAME_PREFIX>__tenantId = ...

Nästa steg

Se följande relaterade artiklar: