Delen via


Authenticeren met Azure-resources van Java-apps die lokaal worden gehost

Apps die buiten Azure worden gehost, zoals on-premises of in een datacenter van derden, moeten een service-principal voor toepassingen gebruiken via Microsoft Entra ID om te verifiëren bij Azure services. In de volgende secties leert u het volgende:

  • Een toepassing registreren bij Microsoft Entra om een service principal te maken.
  • Rollen toewijzen aan scopetoestemmingen.
  • Authenticeren met behulp van een service-principal vanuit uw applicatiecode.

Met behulp van service-principals voor toegewezen toepassingen kunt u het principe van minimale bevoegdheden volgen bij het openen van Azure resources. Beperk machtigingen tot de specifieke vereisten van de app tijdens de ontwikkeling om onbedoelde toegang tot Azure resources te voorkomen die zijn bedoeld voor andere apps of services. Deze aanpak helpt u ook problemen te voorkomen bij het verplaatsen van de app naar productie door ervoor te zorgen dat de app niet te veel bevoegdheden heeft in de ontwikkelomgeving.

Maak een andere app-registratie voor elke omgeving waar u de app host. U kunt omgevingsspecifieke resourcemachtigingen configureren voor elke service-principal en ervoor zorgen dat een app die in de ene omgeving is geïmplementeerd, geen toegang heeft tot Azure resources in een andere omgeving.

De app registreren in Azure

Toepassingsservice-principalobjecten worden gemaakt via een app-registratie in Azure met behulp van de Azure-portal of Azure CLI.

  1. Gebruik in de Azure-portal de zoekbalk om naar de pagina App registrations te gaan.

  2. Selecteer op de pagina App registrations+ Nieuwe registratie.

  3. Op de pagina Een toepassing registreren:

    • Voer voor het veld Naam een beschrijvende waarde in die de naam van de app en de doelomgeving bevat.
    • Selecteer voor de Ondersteunde accounttypende optie Accounts in dit organisatieadresboek (alleen Microsoft Customer Led - Enkele tenant)of de optie die het beste bij uw vereisten past.
  4. Selecteer Register om uw app te registreren en de service-principal te maken.

    A schermopname waarin wordt getoond hoe u een app-registratie maakt in de Azure portal.

  5. Kopieer op de pagina App-registratie voor uw app de toepassings-id (client) en Directory-id (tenant) en plak deze op een tijdelijke locatie voor later in de configuraties van uw applicatiecode.

  6. Selecteer Een certificaat of geheim toevoegen om referenties voor uw app in te stellen.

  7. Op de pagina Certificaten en geheimen, selecteer + Nieuw clientgeheim.

  8. Voeg in het een clientgeheim toe flyoutvenster dat wordt geopend:

    • Voer voor de beschrijving een waarde in van Current.
    • Laat voor de waarde Verlopen de standaard aanbevolen waarde staan van 180 days.
    • Selecteer Toevoegen om het geheim toe te voegen.
  9. Kopieer op de pagina Certificaten & geheimen de eigenschap Waarde van het clientgeheim voor gebruik in een toekomstige stap.

    Opmerking

    De waarde van het clientgeheim wordt slechts eenmaal weergegeven nadat de app-registratie is gemaakt. U kunt meer clientgeheimen toevoegen zonder dit clientgeheim ongeldig te maken, maar u kunt deze waarde niet opnieuw weergeven.

Rollen toewijzen aan de service-principal van de toepassing

Bepaal vervolgens welke rollen (machtigingen) uw app nodig heeft voor welke resources en wijs deze rollen toe aan de service-principal die u hebt gemaakt. Rollen kunnen worden toegewezen op het niveau van de resource, resourcegroep of abonnement. In dit voorbeeld ziet u hoe u rollen toewijst binnen het bereik van de resourcegroep, omdat de meeste apps al hun Azure resources groeperen in één resourcegroep.

  1. Navigeer in de Azure-portal naar de pagina Overview van de resourcegroep die uw app bevat.

  2. Selecteer Toegangsbeheer (IAM) in de linkernavigatie.

  3. Selecteer + Toevoegen en kies vervolgens roltoewijzing toevoegen in de vervolgkeuzelijst op de pagina Toegangsbeheer (IAM). De pagina Roltoewijzing toevoegen bevat verschillende tabbladen voor het configureren en toewijzen van rollen.

  4. Gebruik op het tabblad Rol het zoekvak om de rol te vinden die u wilt toewijzen. Selecteer de rol en kies Volgende.

  5. Op het tabblad Leden :

    • Voor de waarde 'toegang toewijzen aan' selecteert u gebruiker, gebruikersgroep of service-principal.
    • Voor de waarde Leden kiest u + Leden selecteren om het flyoutdeelvenster Leden selecteren te openen.
    • Zoek naar de service principal die u eerder hebt gemaakt en selecteer deze in de gefilterde resultaten. Kies Selecteren om de groep te selecteren en het uitklapdeelvenster te sluiten.
    • Selecteer Beoordelen en toewijzen onderaan het tabblad Leden .

    Een schermopname die laat zien hoe u een rol toewijst aan de service-principal.

  6. Selecteer op het tabblad Controleren en toewijzen de optie Controleren en toewijzen onderaan de pagina.

De omgevingsvariabelen van de app instellen

Tijdens de uitvoering zoeken bepaalde referenties uit de Azure Identiteitsbibliotheek, zoals DefaultAzureCredential, EnvironmentCredential en ClientSecretCredential, op conventionele wijze naar informatie over de service-principal in de omgevingsvariabelen. Wanneer u met Java werkt, kunt u omgevingsvariabelen op meerdere manieren configureren, afhankelijk van uw hulpprogramma's en omgeving.

Configureer, ongeacht de methode die u kiest, de volgende omgevingsvariabelen voor een service-principal:

  • AZURE_CLIENT_ID: wordt gebruikt om de geregistreerde app in Azure te identificeren.
  • AZURE_TENANT_ID: De ID van de Microsoft Entra-tenant.
  • AZURE_CLIENT_SECRET: de geheime referentie die is gegenereerd voor de app.

Stel de volgende omgevingsvariabelen in. Vervang de waarden van de tijdelijke aanduiding door de werkelijke waarden van uw app-registratie:

export AZURE_CLIENT_ID="<your-client-id>"
export AZURE_TENANT_ID="<your-tenant-id>"
export AZURE_CLIENT_SECRET="<your-client-secret>"

Voor een Java toepassing die wordt uitgevoerd als een systeemservice op een productieserver, definieert u de omgevingsvariabelen in een bestand en verwijst u ernaar met de instructie EnvironmentFile in het service-eenheidsbestand:

[Unit]
Description=Java application service
After=network.target

[Service]
User=app-user
WorkingDirectory=/path/to/java-app
EnvironmentFile=/path/to/java-app/app-environment-variables
ExecStart=/usr/bin/java -jar app.jar

[Install]
WantedBy=multi-user.target

Het omgevingsbestand moet een lijst met omgevingsvariabelen met hun waarden bevatten:

AZURE_CLIENT_ID=<your-client-id>
AZURE_TENANT_ID=<your-tenant-id>
AZURE_CLIENT_SECRET=<your-client-secret>

Verifiëren bij Azure services vanuit uw app

De Azure Identity library biedt verschillende credentials - implementaties van TokenCredential die verschillende scenario's en Microsoft Entra verificatiestromen ondersteunen. In de volgende stappen ziet u hoe u ClientSecretCredential gebruikt wanneer u lokaal en in productie met service-principals werkt.

De code implementeren

Voeg de azure-identity afhankelijkheid toe aan uw pom.xml bestand:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
</dependency>

U opent Azure services met behulp van gespecialiseerde clientklassen uit de verschillende Azure SDK clientbibliotheken. Voer de volgende stappen uit voor elke Java code waarmee een Azure SDK clientobject in uw app wordt gemaakt:

  1. Importeer de ClientSecretCredentialBuilder klasse uit het com.azure.identity pakket.
  2. Maak een ClientSecretCredential object met behulp van ClientSecretCredentialBuilder de tenantId, clientIden clientSecret.
  3. Geef het ClientSecretCredential-exemplaar door aan de methode credential van de Azure SDK clientobjectbouwer.

Een voorbeeld van deze benadering wordt weergegeven in het volgende codesegment:

import com.azure.identity.ClientSecretCredential;
import com.azure.identity.ClientSecretCredentialBuilder;
import com.azure.storage.blob.BlobServiceClient;
import com.azure.storage.blob.BlobServiceClientBuilder;

String tenantId = System.getenv("AZURE_TENANT_ID");
String clientId = System.getenv("AZURE_CLIENT_ID");
String clientSecret = System.getenv("AZURE_CLIENT_SECRET");

ClientSecretCredential credential = new ClientSecretCredentialBuilder()
    .tenantId(tenantId)
    .clientId(clientId)
    .clientSecret(clientSecret)
    .build();

BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
    .endpoint("https://<account-name>.blob.core.windows.net")
    .credential(credential)
    .buildClient();