Megosztás a következőn keresztül:


Hitelesítőadat-láncok a Javához készült Azure Identity-kódtárban

Az Azure Identity-kódtár hitelesítő adatokat biztosít– nyilvános osztályokat, amelyek implementálják az Azure Core-kódtár TokenCredential felületét. A hitelesítő adatok egy különálló hitelesítési folyamatot jelentenek a hozzáférési jogkivonat Microsoft Entra-azonosítóból való beszerzéséhez. Ezek a hitelesítő adatok összefűzhetők, hogy a megkísérlendő hitelesítési mechanizmusok rendezett sorozatát alakíthassák ki.

A láncba fűzött hitelesítő adatok működése

Futásidőben egy hitelesítési lánc megpróbálja hitelesíteni magát a lánc első hitelesítő adatával. Ha a hitelesítő adatok nem szereznek be hozzáférési jogkivonatot, a rendszer megkísérli a következő hitelesítő adatot a sorozatban, és így tovább, amíg egy hozzáférési jogkivonatot nem szerez be sikeresen. A következő szekvenciadiagram ezt a viselkedést szemlélteti:

A hitelesítő adatok láncának sorrendjét bemutató diagram.

Miért érdemes hitelesítőadat-láncokat használni?

A láncolt hitelesítés a következő előnyöket kínálhatja:

  • Környezettudatosság: Automatikusan kiválasztja a legmegfelelőbb hitelesítő adatokat az alkalmazás futási környezete alapján. Nélküle a következőhöz hasonló kódot kell írnia:

    import com.azure.core.credential.TokenCredential;
    import com.azure.identity.AzureCliCredentialBuilder;
    import com.azure.identity.ManagedIdentityCredentialBuilder;
    
    // Code omitted for brevity
    
    TokenCredential credential = null;
    
    // Set up credential based on environment (Azure or local development)
    String environment = System.getenv("ENV");
    
    if (environment != null && environment.equals("production")) {
        credential = new ManagedIdentityCredentialBuilder()
            .clientId(userAssignedClientId)
            .build();
    } else {
        credential = new AzureCliCredentialBuilder()
            .build();
    }
    
  • Zökkenőmentes váltások: Az alkalmazás gond nélkül átállhat a helyi fejlesztésből az előkészítő vagy éles környezetre, anélkül, hogy módosítaná a hitelesítési kódot.

  • Továbbfejlesztett rugalmasság: Tartalmaz egy tartalék mechanizmust, amely a következő hitelesítő adatokra kerül, ha az előző nem szerez be hozzáférési jogkivonatot.

Hogyan válasszunk ki láncolt hitelesítő adatokat

A hitelesítő adatok láncolásának két különböző filozófiája van:

DefaultAzureCredential – áttekintés

A DefaultAzureCredential egy véleményezett, előre konfigurált hitelesítőadat-lánc. Számos környezetet támogat, a leggyakoribb hitelesítési folyamatokkal és fejlesztői eszközökkel együtt. Grafikus formában az alapul szolgáló lánc a következőképpen néz ki:

A DefaultAzureCredential hitelesítési folyamatot bemutató diagram.

A hitelesítő adatokra tett kísérletek sorrendje a következő. DefaultAzureCredential

Rendelés Hitelesítő adat Leírás
1 Környezet Beolvassa a környezeti változók gyűjteményét annak megállapításához, hogy az alkalmazáshoz konfigurálva van-e egy alkalmazás-szolgáltatásazonosító (alkalmazásfelhasználó). Ha igen, DefaultAzureCredential ezeket az értékeket használva hitelesítheti az alkalmazást az Azure-ban. Ezt a módszert leggyakrabban kiszolgálókörnyezetekben használják, de helyi fejlesztéskor is használható.
2 Munkaterhelés identitás Ha az alkalmazás olyan Azure-gazdagépen van üzembe helyezve, amelyen engedélyezve van a Számítási feladat identitása, hitelesítse ezt a fiókot.
3 Felügyelt identitás Ha az alkalmazás olyan Azure-gazdagépen van üzembe helyezve, amelyen engedélyezve van a felügyelt identitás, hitelesítse az alkalmazást az Azure-ban ezzel a felügyelt identitással.
4 IntelliJ Ha a fejlesztő az IntelliJ-hez készült Azure Toolkiten keresztül hitelesített, hitelesítse ezt a fiókot.
5 Visual Studio Code Ha a fejlesztő a Visual Studio Code Azure Resources-bővítményével és az azure-identity-broker csomaggal hitelesítve van, hitelesítse ezt a fiókot.
6 Azure CLI Ha a fejlesztő az Azure CLI parancsával az login hitelesítést végzett az Azure-ban, azonos fiókkal hitelesítse az alkalmazást az Azure-ban.
7 Azure PowerShell Ha a fejlesztő az Azure PowerShell parancsmagjával Connect-AzAccount hitelesítette az Azure-t, azonos fiókkal hitelesítse az alkalmazást az Azure-ban.
8 Azure Developer CLI Ha a fejlesztő az Azure Developer CLI azd auth login parancsával hitelesítve van az Azure-ban, akkor ezzel a fiókkal hitelesíthet.
9 Bróker Hitelesítés az operációs rendszerbe egy közvetítőn keresztül bejelentkezett alapértelmezett fiókkal. Az azure-identity-broker csomag telepítését igényli, mivel a rendszer egy közvetítő által engedélyezett példányt InteractiveBrowserCredential használ.

Legegyszerűbb formájában a paraméter nélküli verziót DefaultAzureCredential az alábbiak szerint használhatja:

import com.azure.identity.DefaultAzureCredential;
import com.azure.identity.DefaultAzureCredentialBuilder;

// Code omitted for brevity

DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
    .build();

A DefaultAzureCredential testreszabása

Az alábbi szakaszok a láncban szereplő hitelesítő adatok szabályozására szolgáló stratégiákat ismertetik.

Hitelesítőadat-típus kategória kizárása

Ha ki akarja zárni az összes Developer tool vagy Deployed service hitelesítő adatot, állítsa be a AZURE_TOKEN_CREDENTIALS környezeti változót prod vagy dev értékre. Ha egy értéket prod használ, a mögöttes hitelesítőadat-lánc a következőképpen néz ki:

A DefaultAzureCredential értéket ábrázoló diagram AZURE_TOKEN_CREDENTIALS

Ha egy értéket dev használ, a lánc a következőképpen néz ki:

A DefaultAzureCredential értéket ábrázoló diagram AZURE_TOKEN_CREDENTIALS

Fontos

A AZURE_TOKEN_CREDENTIALS környezeti változó az 1.16.1-s és újabb csomagverziókban azure-identity támogatott.

Annak érdekében, hogy a környezeti változó definiálva legyen, és egy támogatott sztringre legyen beállítva, hívja meg a metódust requireEnvVars az alábbiak szerint:

DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
    .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)
    .build();

Adott hitelesítő adat használata

Ha egy kivételével minden hitelesítő adatot ki szeretne zárni, állítsa be a környezeti változót AZURE_TOKEN_CREDENTIALS a hitelesítő adatok nevére. Például a DefaultAzureCredential láncot AzureCliCredential-re csökkentheti azzal, hogy a AZURE_TOKEN_CREDENTIALS értékét AzureCliCredential-re állítja be. A sztring-összehasonlítás kis- és nagybetűkre érzéketlen módon történik. A környezeti változó érvényes sztringértékei a következők:

  • AzureCliCredential
  • AzureDeveloperCliCredential
  • AzurePowerShellCredential
  • EnvironmentCredential
  • IntelliJCredential
  • ManagedIdentityCredential
  • VisualStudioCodeCredential
  • WorkloadIdentityCredential

Fontos

A AZURE_TOKEN_CREDENTIALS környezeti változó támogatja az egyes hitelesítő adatok nevét az 1.17.0-s és újabb csomagverziókban azure-identity .

Annak érdekében, hogy a környezeti változó definiálva legyen, és egy támogatott sztringre legyen beállítva, a hívási metódus az alábbiak szerint követeli meg azEnvVars függvényt:

DefaultAzureCredential credential = new DefaultAzureCredentialBuilder()
    .requireEnvVars(AzureIdentityEnvVars.AZURE_TOKEN_CREDENTIALS)
    .build();

ChainedTokenCredential áttekintés

A ChainedTokenCredential egy üres lánc, amelyhez hitelesítő adatokat ad hozzá az alkalmazás igényeinek megfelelően. Példa:

import com.azure.identity.AzureCliCredential;
import com.azure.identity.AzureCliCredentialBuilder;
import com.azure.identity.ChainedTokenCredential;
import com.azure.identity.ChainedTokenCredentialBuilder;
import com.azure.identity.IntelliJCredential;
import com.azure.identity.IntelliJCredentialBuilder;

// Code omitted for brevity

AzureCliCredential cliCredential = new AzureCliCredentialBuilder()
    .build();
IntelliJCredential ijCredential = new IntelliJCredentialBuilder()
    .build();

ChainedTokenCredential credential = new ChainedTokenCredentialBuilder()
    .addLast(cliCredential)
    .addLast(ijCredential)
    .build();

Az előző kódminta egy személyre szabott hitelesítőadat-láncot hoz létre, amely két fejlesztési idejű hitelesítő adatból áll. AzureCliCredential-t kísérlik meg először, majd szükség esetén IntelliJCredential-et. Grafikus formában a lánc a következőképpen néz ki:

Az Azure CLI- és IntelliJ-hitelesítő adatokból álló ChainedTokenCredential-példány hitelesítési folyamatát bemutató diagram.

Tipp.

A jobb teljesítmény érdekében optimalizálja a hitelesítő adatok sorrendjét ChainedTokenCredential a legtöbbtől a legkevésbé használt hitelesítő adatokig.

Használati útmutató a DefaultAzureCredentialhoz

DefaultAzureCredential Kétségtelen, hogy a legegyszerűbb módszer az Azure Identity-kódtár használatának megkezdésére, de ezzel a kényelemmel kompromisszumok is járnak. Miután üzembe helyezi az alkalmazást az Azure-ban, ismernie kell az alkalmazás hitelesítési követelményeit. Ezért cserélje le a DefaultAzureCredential egy adott TokenCredential implementációra, például ManagedIdentityCredential.

A következőkért:

  • Hibakeresési problémák: Ha a hitelesítés sikertelen, a hibás hitelesítő adatok hibakeresése és azonosítása kihívást jelenthet. Engedélyeznie kell a naplózást, hogy láthassa az egyik hitelesítő adatból a következőbe való előrehaladást, valamint az egyes hitelesítő adatok sikerességi/sikertelenségi állapotát. További információ: Láncolt hitelesítő adatok hibakeresése.
  • Teljesítményterhelés: A több hitelesítő adat egymás utáni kipróbálásának folyamata teljesítményterhelést okozhat. Ha például helyi fejlesztőgépen fut, a felügyelt identitás nem érhető el. ManagedIdentityCredential Ezért a helyi fejlesztési környezetben mindig meghiúsul.
  • Kiszámíthatatlan viselkedés: DefaultAzureCredential bizonyos környezeti változók jelenlétét ellenőrzi. Lehetséges, hogy valaki hozzáadhatja vagy módosíthatja ezeket a környezeti változókat a gazdaszámítógép rendszerszintjén. Ezek a módosítások globálisan érvényesek, ezért a számítógépen futó alkalmazások futásidejű viselkedését DefaultAzureCredential megváltoztatják.

Láncolt hitelesítő adatok hibakeresése

Egy váratlan probléma diagnosztizálásához vagy a láncolt hitelesítő adatok használatának megértéséhez engedélyezze a naplózást az alkalmazásban.

Ábrakészítés céljából tegyük fel, hogy a paraméter nélküli formátum DefaultAzureCredential a Blob Storage-fiókra irányuló kérések hitelesítésére szolgál. Az alkalmazás a helyi fejlesztési környezetben fut, és a fejlesztő az Azure CLI használatával hitelesítve van az Azure-ban. Az alkalmazás futtatásakor az alábbi vonatkozó bejegyzések jelennek meg a kimenetben:

[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential EnvironmentCredential is unavailable.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential WorkloadIdentityCredential is unavailable.
[ForkJoinPool.commonPool-worker-1] WARN com.microsoft.aad.msal4j.ConfidentialClientApplication - [Correlation ID: aaaa0000-bb11-2222-33cc-444444dddddd] Execution of class com.microsoft.aad.msal4j.AcquireTokenByClientCredentialSupplier failed: java.util.concurrent.ExecutionException: com.azure.identity.CredentialUnavailableException: ManagedIdentityCredential authentication unavailable. Connection to IMDS endpoint cannot be established.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential ManagedIdentityCredential is unavailable.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential IntelliJCredential is unavailable.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential VisualStudioCodeCredential is unavailable.
[main] INFO com.azure.identity.ChainedTokenCredential - Azure Identity => Attempted credential AzureCliCredential returns a token

Az előző kimenetben figyelje meg, hogy:

  • EnvironmentCredential, WorkloadIdentityCredential, ManagedIdentityCredential, IntelliJCredentialés VisualStudioCodeCredential ebben a sorrendben nem sikerült beszerezni a Microsoft Entra hozzáférési jogkivonatot.
  • A AzureCliCredential.getToken hívás sikeres, ahogy azt a returns a token-utótagú bejegyzés is jelzi. Mivel AzureCliCredential sikeres volt, nem próbáltak ki további hitelesítő adatokat.