Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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:
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:
- Előre konfigurált lánc használata: Kezdje egy véleményezett, előre konfigurált lánccal, amely a leggyakoribb hitelesítési forgatókönyveket támogatja. Ehhez a megközelítéshez tekintse meg a DefaultAzureCredential áttekintési szakaszát .
- Lánc létrehozása: Kezdje egy üres lánccal, és csak azt foglalja bele, amire szüksége van. Ehhez a megközelítéshez tekintse meg a ChainedTokenCredential áttekintési szakaszát .
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 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:
Ha egy értéket dev használ, a lánc a következőképpen néz ki:
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:
AzureCliCredentialAzureDeveloperCliCredentialAzurePowerShellCredentialEnvironmentCredentialIntelliJCredentialManagedIdentityCredentialVisualStudioCodeCredentialWorkloadIdentityCredential
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:
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.
ManagedIdentityCredentialEzért a helyi fejlesztési környezetben mindig meghiúsul. -
Kiszámíthatatlan viselkedés:
DefaultAzureCredentialbizonyos 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étDefaultAzureCredentialmegvá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ésVisualStudioCodeCredentialebben a sorrendben nem sikerült beszerezni a Microsoft Entra hozzáférési jogkivonatot. - A
AzureCliCredential.getTokenhívás sikeres, ahogy azt areturns a token-utótagú bejegyzés is jelzi. MivelAzureCliCredentialsikeres volt, nem próbáltak ki további hitelesítő adatokat.