Autentisera och auktorisera ett program med Microsoft Entra-ID för åtkomst till Azure Relay-entiteter

Azure Relay stöder användning av Microsoft Entra-ID för att auktorisera begäranden till Azure Relay-entiteter (Hybrid Anslut ions, WCF Relays). Med Microsoft Entra-ID kan du använda rollbaserad åtkomstkontroll i Azure (Azure RBAC) för att bevilja behörigheter till ett säkerhetsobjekt, som kan vara en användare, grupp eller programtjänsthuvudnamn. Mer information om roller och rolltilldelningar finns i Förstå de olika rollerna.

Kommentar

Den här funktionen är allmänt tillgänglig i alla regioner utom Microsoft Azure som drivs av 21Vianet.

Översikt

När ett säkerhetsobjekt (en användare, grupp, ett program) försöker komma åt en Relay-entitet måste begäran auktoriseras. Med Microsoft Entra-ID är åtkomst till en resurs en tvåstegsprocess.

  1. Först autentiseras säkerhetsobjektets identitet och en OAuth 2.0-token returneras. Resursnamnet för att begära en token är https://relay.azure.net. Om ett program körs inom en Azure-entitet, till exempel en virtuell Azure-dator, en VM-skalningsuppsättning eller en Azure-funktionsapp, kan den använda en hanterad identitet för att komma åt resurserna.
  2. Därefter skickas token som en del av en begäran till Relay-tjänsten för att ge åtkomst till den angivna resursen (hybridanslutningar, WCF-reläer). Microsoft Entra auktoriserar åtkomsträttigheter till skyddade resurser via rollbaserad åtkomstkontroll i Azure (Azure RBAC). Azure Relay definierar en uppsättning inbyggda Azure-roller som omfattar vanliga uppsättningar med behörigheter som används för att komma åt Relay-entiteter. Du kan också definiera anpassade roller för åtkomst till data. En lista över inbyggda roller som stöds av Azure Relay finns i Inbyggda Azure-roller för Azure Relay. Inbyggda program och webbprogram som skickar begäranden till Relay kan också auktorisera med Microsoft Entra-ID.

Inbyggda Azure-roller för Azure Relay

För Azure Relay skyddas redan hanteringen av namnområden och alla relaterade resurser via Azure-portalen och AZURE-resurshanterings-API:et med hjälp av Azure RBAC-modellen. Azure tillhandahåller de inbyggda Azure-rollerna nedan för att auktorisera åtkomst till ett Relay-namnområde:

Roll beskrivning
Azure Relay-ägare Använd den här rollen för att ge fullständig åtkomst till Azure Relay-resurser.
Azure Relay-lyssnare Använd den här rollen för att bevilja läsbehörighet för lyssning och entitet till Azure Relay-resurser.
Azure Relay-avsändare Använd den här rollen för att bevilja läsbehörighet för skicka och entitet till Azure Relay-resurser.

Resursomfång

Innan du tilldelar en Azure-roll till ett säkerhetsobjekt ska du bestämma omfånget för åtkomst som säkerhetsobjektet ska ha. Bästa praxis kräver att det alltid är bäst att endast bevilja minsta möjliga omfång.

I följande lista beskrivs de nivåer där du kan begränsa åtkomsten till Azure Relay-resurser, med början med det smalaste omfånget:

  • Relay-entiteter: Rolltilldelning gäller för en specifik Relay-entitet som en hybridanslutning eller ett WCF-relä.
  • Relay-namnrymd: Rolltilldelning gäller för alla Relay-entiteter under namnområdet.
  • Resursgrupp: Rolltilldelning gäller för alla Relay-resurser under resursgruppen.
  • Prenumeration: Rolltilldelning gäller för alla Relay-resurser i alla resursgrupper i prenumerationen.

Kommentar

Tänk på att Azure-rolltilldelningar kan ta upp till fem minuter att sprida. Mer information om hur inbyggda roller definieras finns i Förstå rolldefinitioner. Information om hur du skapar anpassade Azure-roller finns i Anpassade Azure-roller.

Autentisera från en app

En viktig fördel med att använda Microsoft Entra-ID med Azure Relay är att dina autentiseringsuppgifter inte längre behöver lagras i koden. I stället kan du begära en OAuth 2.0-åtkomsttoken från Microsofts identitetsplattform. Microsoft Entra autentiserar säkerhetsobjektet (en användare, en grupp eller tjänstens huvudnamn) som kör programmet. Om autentiseringen lyckas returnerar Microsoft Entra-ID:t åtkomsttoken till programmet, och programmet kan sedan använda åtkomsttoken för att auktorisera begäranden till Azure Relay.

Följande avsnitt visar hur du konfigurerar konsolprogrammet för autentisering med Microsofts identitetsplattform 2.0. Mer information finns i översikten över Microsofts identitetsplattform (v2.0).

En översikt över OAuth 2.0-kodbidragsflödet finns i Auktorisera åtkomst till Microsoft Entra-webbprogram med hjälp av OAuth 2.0-kodtillämpningsflödet.

Registrera ditt program med en Microsoft Entra-klientorganisation

Det första steget i att använda Microsoft Entra-ID för att auktorisera Azure Relay-entiteter är att registrera ditt klientprogram med en Microsoft Entra-klientorganisation från Azure-portalen. När du registrerar klientprogrammet anger du information om programmet till AD. Microsoft Entra-ID tillhandahåller sedan ett klient-ID (även kallat ett program-ID) som du kan använda för att associera ditt program med Microsoft Entra-körning.

Stegvisa instruktioner för att registrera ditt program med Microsoft Entra-ID finns i Snabbstart: Registrera ett program med Microsoft Entra-ID.

Viktigt!

Anteckna katalog-ID:t (klientorganisation) och program-ID:t (klient). Du behöver dessa värden för att köra exempelprogrammet.

Skapa en klienthemlighet

Appen behöver en klienthemlighet för att bevisa sin identitet när det begär en token. I samma artikel som länkats tidigare kan du läsa avsnittet Lägg till en klienthemlighet för att skapa en klienthemlighet.

Viktigt!

Anteckna klienthemligheten. Du behöver det för att köra exempelprogrammet.

Tilldela Azure-roller med hjälp av Azure-portalen

Tilldela en av Azure Relay-rollerna till programmets tjänsthuvudnamn i önskat omfång (Relay-entitet, namnområde, resursgrupp, prenumeration). Läs mer om att tilldela roller i Tilldela Azure-roller via Azure Portal.

Kör exemplet

  1. Ladda ned konsolprogramexemplet från GitHub.

  2. Kör programmet lokalt på datorn enligt anvisningarna i README-artikeln.

    Kommentar

    Följ samma steg för att köra exempelkonsolprogrammet för WCF Relay.

Markerad kod från exemplet

Här är koden från exemplet som visar hur du använder Microsoft Entra-autentisering för att ansluta till Azure Relay-tjänsten.

  1. Skapa ett TokenProvider-objekt med hjälp TokenProvider.CreateAzureActiveDirectoryTokenProvider av metoden .

    Om du inte redan har skapat en appregistrering läser du avsnittet Registrera ditt program med Microsoft Entra-ID för att skapa den och skapar sedan en klienthemlighet enligt beskrivningen i avsnittet Skapa en klienthemlighet .

    Om du vill använda en befintlig appregistrering följer du de här anvisningarna för att hämta program-ID och katalog-ID (klientorganisation).

    1. Logga in på Azure-portalen.
    2. Sök efter och välj Microsoft Entra-ID med hjälp av sökfältet högst upp.
    3. På sidan Microsoft Entra-ID väljer du Appregistreringar i avsnittet Hantera på den vänstra menyn.
    4. Välj din appregistrering.
    5. På sidan för appregistreringen visas värdena för program-ID (klient)-ID och katalog-ID (klientorganisation).

    Följ dessa steg för att hämta klienthemligheten:

    1. På sidan din appregistrering väljer du Certifikat och hemligheter på den vänstra menyn.
    2. Använd kopieringsknappen i kolumnen Värde för hemligheten i avsnittet Klienthemligheter .
    static TokenProvider GetAadTokenProvider(string clientId, string tenantId, string clientSecret)
    {
        return TokenProvider.CreateAzureActiveDirectoryTokenProvider(
            async (audience, authority, state) =>
            {
                IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(clientId)
                    .WithAuthority(authority)
                    .WithClientSecret(clientSecret)
                    .Build();
    
                var authResult = await app.AcquireTokenForClient(new [] { $"{audience}/.default" }).ExecuteAsync();
                return authResult.AccessToken;
            },
            $"https://login.microsoftonline.com/{tenantId}");
    }
    
  2. Skapa ett Hybrid Anslut ionListener- eller Hybrid Anslut ionClient-objekt genom att skicka hybridanslutnings-URI:n och tokenprovidern som du skapade i föregående steg.

    Lyssnare:

    var listener = new HybridConnectionListener(hybridConnectionUri, tokenProvider);    
    

    Avsändaren:

    var sender = new HybridConnectionClient(hybridConnectionUri, tokenProvider);    
    

Exempel

Nästa steg

Mer information om Azure Relay finns i följande avsnitt.