Dela via


Konfigurera auktorisering mellan klientorganisationer med Microsoft Entra

Av säkerhetsskäl kan servern vara värd för en klientorganisation som är oberoende av din Azure SignalR Service-resurs. Eftersom hanterad identitet inte kan användas mellan klientorganisationer måste du registrera ett program i klient A och sedan etablera det som ett företagsprogram i klient B. Den här artikeln hjälper dig att skapa ett program i klient A och använda det för att ansluta till en Azure SignalR Service-resurs i klient B.

Registrera ett program med flera klienter i klient A

Det första steget är att skapa en applikation för flera hyresgäster. Mer information finns i Snabbstart: Registrera ett program i Microsoft Entra-ID.

Om du redan har ett enda klientprogram följer du anvisningarna i Konvertera en app med en klientorganisation till flera klientorganisationer på Microsoft Entra-ID.

Det finns fyra kontotyper:

  • Konton i den här organisationskatalogen
  • Konton i vilken som helst organisationskatalog
  • Konton i en organisationskatalog och personliga Microsoft-konton
  • Personliga Microsoft-konton

Se till att välja antingen den andra typen eller den tredje typen när du skapar programmet.

Skärmbild som visar en översikt över information för ett registrerat program .

Anteckna applikationens (klient) ID och katalogens (tenant) ID för användning i följande steg.

Etablera programmet i klient B

Du kan inte tilldela rollen till applikationen som är registrerad hos andra hyresgäster. Du måste etablera det som ett externt företagsprogram i klient B. Om du behöver mer information kan du lära dig om skillnaderna mellan appregistrering och företagsprogram.

I korthet är företagsapplikationen ett tjänstehuvudkonto, och appregistreringen är inte ett sådant. Företagsprogrammet ärver vissa egenskaper från programobjektet, till exempel programmets (klient)-ID.

Ett standardtjänsthuvudnamn skapas i klientorganisationen där appen är registrerad. För andra hyresgäster måste du konfigurera appen för att få en tjänsthuvudprincip för företagsapplikationstjänsten. Mer information finns i Skapa ett företagsprogram från ett program med flera klientorganisationer i Microsoft Entra-ID.

Företagsapplikationer i olika klientorganisationer har olika katalog-ID:n (klientorganisationer), men de delar samma program-ID (klient-ID).

Tilldela roller till företagsprogrammet

När du har etablerat företagsprogrammet i din klient B kan du tilldela roller till det.

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 Portal.

Anmärkning

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.

    Yrkesroll 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äljer du välj medlemmar och sedan väljer du 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äljer du välj medlemmar och sedan väljer du programmet 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 spridas.

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

Konfigurera Azure SignalR Service SDK för att använda företagsapplikationen

Ett program använder tre olika typer av autentiseringsuppgifter för att autentisera sig själv:

  • Certifikaten
  • Klienthemligheter
  • Federerad identitet

Vi rekommenderar starkt att du använder certifikat eller klient-hemligheter för att utföra begäranden över organisationsgränser.

Använda certifikat eller klienthemligheter

  • Parametern tenantId är ID:t för din klient B.
  • Parametrarna clientId i båda tenanterna är lika.
  • Parametrarna clientSecret och clientCert konfigureras i klient A. Mer information finns i Lägg till autentiseringsuppgifter.

Om du inte är säker på ditt klientorganisations-ID kan du läsa Hitta din Microsoft Entra-klientorganisation.

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),
    };
});

Använda federerad identitet

Av säkerhetsskäl kan certifikat och klienthemligheter inaktiveras i din prenumeration. I det här fallet måste du antingen använda en extern identitetsprovider eller prova förhandsversionen av stöd för hanterad identitet. Mer information finns i:

Detaljerad information och videovägledning finns i Microsoft Entra Cross-Tenant Application Federated Identity Credential (FIC).

När du använder hanterad identitet som identitetsprovider ser koden ut som följande exempel:

  • Parametern tenantId är ID:t för din klient B.
  • Parametrarna clientId i båda tenanterna är lika.
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);
    ];
});

När du använder externa identitetsprovidrar ser koden ut som i följande exempel:

services.AddSignalR().AddAzureSignalR(option =>
{
    var credential = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
    {
        // Find your own way to get a token from the external identity provider.
        // The audience of the token should be "api://AzureADTokenExchange" because it is the recommended value.
        return "TheTokenYouGetFromYourExternalIdentityProvider";
    });

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

Att felsöka tokenförvärv med Azure SignalR Service SDK är en utmaning eftersom det beror på tokenresultatet. Vi rekommenderar att du testar processen för tokenanskaffning lokalt innan du integrerar med Azure SignalR Service SDK.

var assertion = new ClientAssertionCredential("tenantId", "appClientId", async (ctoken) =>
{
    // Find your own way to get a token from the external identity provider.
    // The audience of the token should be "api://AzureADTokenExchange" because it is the recommended value.
    return TheTokenYouGetFromYourExternalIdentityProvider;
});

var request = new TokenRequestContext(["https://signalr.azure.com/.default");
var token = await assertion.GetTokenAsync(assertion);
Console.log(token.Token);

Den viktigaste punkten är att använda en inre autentiseringsuppgift för att hämta en clientAssertion parameter från api://AzureADTokenExchange eller andra betrodda identitetsplattformar. Använd den sedan för att byta ut mot en token med målgruppen https://signalr.azure.com/.default för att få åtkomst till din resurs.

Målet är att få en token med följande påståenden. Använd jwt.io för att avkoda token:

  • oid: Värdet ska vara lika med företagets objekt-ID för program. Om du inte vet var du kan hämta det kan du läsa Hämta ett objekt-ID för företag.
  • tid: Värdet ska vara lika med katalog-ID:t för klientorganisationen B. Om du inte är säker på ditt klientorganisations-ID kan du läsa Hitta din Microsoft Entra-klientorganisation.
  • målgrupp: Målgruppen måste vara https://signalr.azure.com/.default för att få åtkomst till Azure SignalR Service-resurser.