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áncolt hitelesítő működése
Futásidőben egy hitelesítőadat-lánc megpróbálja a hitelesítést a sorozat első hitelesítő adata alapján végrehajtani. 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 { ManagedIdentityCredential, AzureCliCredential } from "@azure/identity"; let credential; if (process.env.NODE_ENV === "production") { credential = new ManagedIdentityCredential(); } else { credential = new AzureCliCredential(); }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 lép, ha az előző nem szerez be hozzáférési tokent.
Láncolt azonosító kiválasztása
A hitelesítő adatok láncolásának két különböző megközelítése van:
- Lánc "lebontása": Kezdje egy előre konfigurált lánccal, és zárja ki azt, amire nincs szüksége. Ehhez a megközelítéshez tekintse meg a DefaultAzureCredential áttekintési szakaszát .
- Lánc összeállítása: Kezdje egy üres lánccal, és csak azt tegye bele, amire szüksége van. Ehhez a megközelítéshez tekintse meg a ChainedTokenCredential áttekintési szakaszát .
DefaultAzureCredential – áttekintés
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:
DefaultAzureCredential a hitelesítő adatok próbálkozási sorrendjét követi.
| Megrendelés | Megbízólevél | Leírás | Alapértelmezés szerint engedélyezett? |
|---|---|---|---|
| 1 | környezet | Beolvassa a környezeti változók gyűjteményét, annak megállapításához, hogy az alkalmazáshoz egy alkalmazás szolgáltatói objektum (alkalmazásfelhasználó) van-e konfigurálva. Ha igen, DefaultAzureCredential ezeket az értékeket használja az alkalmazás Azure-beli hitelesítéséhez. Ezt a módszert leggyakrabban kiszolgálókörnyezetekben használják, de helyi fejlesztéskor is használható. |
Igen |
| 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. | Igen |
| 3 | Kezelhető 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. | Igen |
| 4 | Visual Studio Code | Ha a fejlesztő a Visual Studio Code Azure Resources-bővítményével és a @azure/identity-vscode csomaggal hitelesítve van, hitelesítse ezt a fiókot. | Igen |
| 5 | Azure CLI | Ha a fejlesztő az Azure CLI az login parancsával hitelesítette az Azure-t, azonos fiókkal hitelesítse az alkalmazást az Azure-ban. |
Igen |
| 6 | Azure PowerShell | Ha a fejlesztő az Azure PowerShell Connect-AzAccount parancsmagjával hitelesítette az Azure-t, azonos fiókkal hitelesítse az alkalmazást az Azure-ban. |
Igen |
| 7 | 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. |
Igen |
| 8 | Bróker | Hitelesítés az operációs rendszerbe egy közvetítőn keresztül bejelentkezett alapértelmezett fiókkal. A @azure/identity-broker csomag telepítése szükséges. | Igen |
Legegyszerűbb formájában a DefaultAzureCredential paraméter nélküli verzióját használhatja az alábbiak szerint:
import { DefaultAzureCredential } from "@azure/identity";
import { BlobServiceClient } from "@azure/storage-blob";
// Acquire a credential object
const credential = new DefaultAzureCredential();
const blobServiceClient = new BlobServiceClient(
`https://${storageAccountName}.blob.core.windows.net`,
credential
);
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:
A környezeti változó definiálásához és egy támogatott sztringre való beállításához állítsa a szükségesEnvVars tulajdonságot a következőre AZURE_TOKEN_CREDENTIALS:
const credential = new DefaultAzureCredential({
requiredEnvVars: [ "AZURE_TOKEN_CREDENTIALS" ]
});
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:
AzureCliCredentialAzureDeveloperCliCredentialAzurePowerShellCredentialEnvironmentCredentialManagedIdentityCredentialVisualStudioCodeCredentialWorkloadIdentityCredential
Fontos
A AZURE_TOKEN_CREDENTIALS környezeti változó támogatja az egyes hitelesítő adatok nevét a 4.11.0-s és újabb csomagverziókban @azure/identity .
Annak biztosításához, hogy a környezeti változó definiálva legyen, és egy támogatott sztringre legyen állítva, állítsa a requiredEnvVars tulajdonságot a következőre AZURE_TOKEN_CREDENTIALS:
const credential = new DefaultAzureCredential({
requiredEnvVars: [ "AZURE_TOKEN_CREDENTIALS" ]
});
ChainedTokenCredential áttekintés
ChainedTokenCredential egy üres lánc, amelyhez hitelesítő adatokat ad hozzá az alkalmazás igényeinek megfelelően. Például:
import {
ChainedTokenCredential,
AzureCliCredential,
VisualStudioCodeCredential
} from "@azure/identity";
const credential = new ChainedTokenCredential(
new AzureCliCredential(),
new VisualStudioCodeCredential()
);
const blobServiceClient = new BlobServiceClient(
`https://${storageAccountName}.blob.core.windows.net`,
credential
);
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 VisualStudioCodeCredential-et. Grafikus formában a lánc a következőképpen néz ki:
Borravaló
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ó: 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, és ezért módosítják aDefaultAzureCredentialfutásidőben való viselkedését a számítógépen futó alkalmazásokban.
Egy hitelesítő adat hibakeresése
Egy váratlan probléma diagnosztizálásához vagy a hitelesítő adatok használatának megértéséhez engedélyezze a bejelentkezést az alkalmazásban. Például:
import { setLogLevel, AzureLogger } from "@azure/logger";
import { BlobServiceClient } from "@azure/storage-blob";
import { DefaultAzureCredential } from "@azure/identity";
// Constant for the Azure Identity log prefix
const AZURE_IDENTITY_LOG_PREFIX = "azure:identity";
// override logging to output to console.log (default location is stderr)
// only log messages that start with the Azure Identity log prefix
setLogLevel("verbose");
AzureLogger.log = (...args) => {
const message = args[0];
if (typeof message === 'string' && message.startsWith(AZURE_IDENTITY_LOG_PREFIX)) {
console.log(...args);
}
};
// Get storage account name from environment variable
const storageAccountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!storageAccountName) {
throw new Error("AZURE_STORAGE_ACCOUNT_NAME environment variable is required");
}
const credential = new DefaultAzureCredential({
requiredEnvVars: [ "AZURE_TOKEN_CREDENTIALS" ]
});
const blobServiceClient = new BlobServiceClient(
`https://${storageAccountName}.blob.core.windows.net`,
credential
);
azure:identity:info EnvironmentCredential => Found the following environment variables:
azure:identity:verbose EnvironmentCredential => AZURE_CLIENT_SEND_CERTIFICATE_CHAIN: undefined; sendCertificateChain: false
azure:identity:info WorkloadIdentityCredential => Found the following environment variables:
azure:identity:warning DefaultAzureCredential => Skipped createDefaultWorkloadIdentityCredential because of an error creating the credential: CredentialUnavailableError: WorkloadIdentityCredential: is unavailable. clientId is a required parameter. In DefaultAzureCredential and ManagedIdentityCredential, this can be provided as an environment variable - "AZURE_CLIENT_ID".
See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/workloadidentitycredential/troubleshoot
azure:identity:info ManagedIdentityCredential => Using DefaultToImds managed identity.
azure:identity:warning DefaultAzureCredential => Skipped createDefaultBrokerCredential because of an error creating the credential: Error: Broker for WAM was requested, but no plugin was configured or no authentication record was found. You must install the @azure/identity-broker plugin package (npm install --save @azure/identity-broker) and enable it by importing `useIdentityPlugin` from `@azure/identity` and calling useIdentityPlugin(nativeBrokerPlugin) before using enableBroker.
azure:identity:info DefaultAzureCredential => getToken() => Skipping createDefaultWorkloadIdentityCredential, reason: WorkloadIdentityCredential: is unavailable. clientId is a required parameter. In DefaultAzureCredential and ManagedIdentityCredential, this can be provided as an environment variable - "AZURE_CLIENT_ID".
See the troubleshooting guide for more information: https://aka.ms/azsdk/js/identity/workloadidentitycredential/troubleshoot
azure:identity:info ManagedIdentityCredential => getToken() => Using the MSAL provider for Managed Identity.
azure:identity:info ManagedIdentityCredential - Token Exchange => ManagedIdentityCredential - Token Exchange: Unavailable. The environment variables needed are: AZURE_CLIENT_ID (or the client ID sent through the parameters), AZURE_TENANT_ID and AZURE_FEDERATED_TOKEN_FILE
azure:identity:info ManagedIdentityCredential => getToken() => MSAL Identity source: DefaultToImds
azure:identity:info ManagedIdentityCredential => getToken() => Using the IMDS endpoint to probe for availability.
azure:identity:info ManagedIdentityCredential - IMDS => ManagedIdentityCredential - IMDS: Pinging the Azure IMDS endpoint
azure:identity:verbose ManagedIdentityCredential - IMDS => ManagedIdentityCredential - IMDS: Caught error RestError: connect ENETUNREACH 169.254.169.254:80
azure:identity:info ManagedIdentityCredential - IMDS => ManagedIdentityCredential - IMDS: The Azure IMDS endpoint is unavailable
azure:identity:error ManagedIdentityCredential => getToken() => ERROR. Scopes: https://storage.azure.com/.default. Error message: Attempted to use the IMDS endpoint, but it is not available..
azure:identity:info AzureCliCredential => getToken() => Using the scope https://storage.azure.com/.default
azure:identity:info AzureCliCredential => getToken() => expires_on is available and is valid, using it
azure:identity:info AzureCliCredential => getToken() => SUCCESS. Scopes: https://storage.azure.com/.default.
Az előző kimenetben figyelje meg, hogy DefaultAzureCredential sikeresen beszerzett egy jogkivonatot a AzureCliCredential használatával.