Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure Identity-biblioteket innehåller autentiseringsuppgifter– offentliga klasser som implementerar Azure Core-bibliotekets TokenCredential--gränssnitt. En autentiseringsuppgift representerar ett distinkt autentiseringsflöde för att hämta en åtkomsttoken från Microsoft Entra-ID. Dessa autentiseringsuppgifter kan kopplas samman för att bilda en ordnad sekvens med autentiseringsmekanismer som ska försökas.
Så här fungerar en länkad autentiseringsuppgift
Vid körning försöker en autentiseringskedja autentisera med sekvensens första autentiseringsuppgifter. Om det inte går att hämta en åtkomsttoken med den nuvarande autentiseringsuppgiften, försöks nästa autentiseringsuppgift i sekvensen tills en åtkomsttoken har hämtats. Följande sekvensdiagram illustrerar det här beteendet:
              
              
              
              
            
Varför använda autentiseringskedjor
En länkad autentiseringsuppgift kan erbjuda följande fördelar:
- Miljömedvetenhet: Väljer automatiskt de lämpligaste autentiseringsuppgifterna baserat på miljön där appen körs. Utan den skulle du behöva skriva kod så här: - import { ManagedIdentityCredential, AzureCliCredential } from "@azure/identity"; let credential; if (process.env.NODE_ENV === "production") { credential = new ManagedIdentityCredential(); } else { credential = new AzureCliCredential(); }
- Sömlösa övergångar: Din app kan gå från lokal utveckling till mellanlagrings- eller produktionsmiljön utan att ändra autentiseringskoden. 
- Förbättrad återhämtning: Innehåller en återställningsmekanism som flyttas till nästa autentiseringsuppgift när den föregående misslyckas med att hämta en åtkomsttoken. 
Så här väljer du en länkad autentiseringsuppgift
Det finns två olika metoder för identifikationskedja:
- "Riv ned" en kedja: Börja med en förkonfigurerad kedja och uteslut det du inte behöver. För denna metod, se avsnittet DefaultAzureCredential-översikt.
- "Bygg upp" en kedja: Börja med en tom kedja och inkludera bara det du behöver. Den här metoden finns i översiktsavsnittet ChainedTokenCredential.
Översikt över DefaultAzureCredential
DefaultAzureCredential är en åsiktsbaserad, förkonfigurerad kedja av autentiseringsuppgifter. Den är utformad för att stödja många miljöer, tillsammans med de vanligaste autentiseringsflödena och utvecklarverktygen. I grafisk form ser den underliggande kedjan ut så här:
I vilken ordning DefaultAzureCredential försök till autentiseringsuppgifter följer.
| Beställning | Behörighet | Beskrivning | Aktiverat som standard? | 
|---|---|---|---|
| 1 | Miljö | Läser en samling miljövariabler för att avgöra om ett programtjänsthuvudnamn (programanvändare) har konfigurerats för appen. I så fall använder DefaultAzureCredentialdessa värden för att autentisera appen till Azure. Den här metoden används oftast i servermiljöer men kan också användas när du utvecklar lokalt. | Yes | 
| 2 | Arbetsbelastningsidentitet | Om appen distribueras till en Azure-värd med aktiverad Workload Identity, autentiserar du det kontot. | Yes | 
| 3 | hanterad identitet | Om appen distribueras till en Azure-värd med hanterad identitet aktiverad autentiserar du appen till Azure med hjälp av den hanterade identiteten. | Yes | 
| 4 | Visual Studio Code | Om utvecklaren autentiserades via Azure Resources-tillägget i Visual Studio Code och paketet @azure/identity-vscode har installerats autentiserar du kontot. | Yes | 
| 5 | Azure CLI- | Om utvecklaren autentiserades till Azure med hjälp av Azure CLI:s az login-kommando autentiserar du appen till Azure med samma konto. | Yes | 
| 6 | Azure PowerShell | Om utvecklaren autentiserade till Azure med hjälp av Azure PowerShells Connect-AzAccountcmdlet autentiserar du appen till Azure med samma konto. | Yes | 
| 7 | Azure Developer CLI | Om utvecklaren autentiserade till Azure med hjälp av Azure Developer CLI:s azd auth login-kommando autentiserar du med det kontot. | Yes | 
| 8 | Broker | Autentiserar med standardkontot som är inloggat i operativsystemet via en mäklare. Kräver att paketet @azure/identity-broker är installerat. | Yes | 
I den enklaste formen kan du använda den parameterlösa versionen av DefaultAzureCredential på följande sätt:
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
);
Så här anpassar du DefaultAzureCredential
I följande avsnitt beskrivs strategier för att kontrollera vilka autentiseringsuppgifter som ingår i kedjan.
Exkludera en kategori för autentiseringsuppgifter
Om du vill exkludera alla Developer tool eller Deployed service autentiseringsuppgifter anger du miljövariabeln AZURE_TOKEN_CREDENTIALS till prod respektive dev. När ett värde prod för används ser den underliggande autentiseringskedjan ut så här:
              
              
              
              
            
När ett värde dev för används ser kedjan ut så här:
              
              
              
              
            
För att säkerställa att miljövariabeln har definierats och angetts till en sträng som stöds anger du egenskapen requiredEnvVars till AZURE_TOKEN_CREDENTIALS:
const credential = new DefaultAzureCredential({ 
    requiredEnvVars: [ "AZURE_TOKEN_CREDENTIALS" ]
});
Använda en specifik autentiseringsuppgift
Om du vill exkludera alla autentiseringsuppgifter förutom en anger du miljövariabeln AZURE_TOKEN_CREDENTIALS till namnet på autentiseringsuppgifterna. Du kan till exempel minska DefaultAzureCredential kedjan till genom att AzureCliCredential ange AZURE_TOKEN_CREDENTIALS till AzureCliCredential. Strängjämförelsen utförs på ett skiftlägesokänsligt sätt. Giltiga strängvärden för miljövariabeln är:
- AzureCliCredential
- AzureDeveloperCliCredential
- AzurePowerShellCredential
- EnvironmentCredential
- ManagedIdentityCredential
- VisualStudioCodeCredential
- WorkloadIdentityCredential
Viktigt!
Miljövariabeln AZURE_TOKEN_CREDENTIALS stöder enskilda autentiseringsuppgifter i @azure/identity paketversionerna 4.11.0 och senare.
För att säkerställa att miljövariabeln har definierats och angetts till en sträng som stöds anger du egenskapen requiredEnvVars till AZURE_TOKEN_CREDENTIALS:
const credential = new DefaultAzureCredential({ 
    requiredEnvVars: [ "AZURE_TOKEN_CREDENTIALS" ]
});
Översikt över ChainedTokenCredential
ChainedTokenCredential är en tom kedja där du lägger till autentiseringsuppgifter som passar appens behov. Till exempel:
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
);
Föregående kodexempel skapar en anpassad autentiseringskedja som består av två autentiseringsuppgifter för utvecklingstid. 
              AzureCliCredential försöks först, följt av VisualStudioCodeCredential, om det behövs. I grafisk form ser kedjan ut så här:
              
              
              
              
            
Tips
För bättre prestanda optimerar du ordning på autentiseringsuppgifter i ChainedTokenCredential från de flesta till minst använda autentiseringsuppgifterna.
Användningsvägledning för DefaultAzureCredential
              DefaultAzureCredential är utan tvekan det enklaste sättet att komma igång med Azure Identity-biblioteket, men med den bekvämligheten kommer kompromisser. När du har distribuerat din app till Azure bör du förstå appens autentiseringskrav. Därför ersätter du DefaultAzureCredential med en specifik TokenCredential implementering, till exempel ManagedIdentityCredential.
Här är varför:
- Felsökningsutmaningar: När autentiseringen misslyckas kan det vara svårt att felsöka och identifiera de felaktiga autentiseringsuppgifterna. Du måste aktivera loggning för att se övergången från ett autentiseringsuppgifter till nästa och se statusen för var och en, om det lyckas eller misslyckas. Mer information finns i Felsöka en autentiseringsuppgift.
- 
              Prestandakostnader: Processen med att sekventiellt prova flera autentiseringsuppgifter kan medföra prestandakostnader. När den till exempel körs på en lokal utvecklingsdator är den hanterade identiteten inte tillgänglig. Därför ManagedIdentityCredentialmisslyckas alltid i den lokala utvecklingsmiljön.
- 
              Oförutsägbart beteende: DefaultAzureCredentialsöker efter förekomsten av vissa miljövariabler. Det är möjligt att någon kan lägga till eller ändra dessa miljövariabler på systemnivå på värddatorn. Dessa ändringar gäller globalt och ändrar därför beteendet förDefaultAzureCredentialvid körning i alla appar som körs på den datorn.
Felsöka en autentiseringsuppgift
Om du vill diagnostisera ett oväntat problem eller förstå vad en autentiseringsuppgift gör aktiverar du loggning i din app. Till exempel:
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.
Observera i föregående utdata att DefaultAzureCredential framgångsrikt har hämtat en token med hjälp av AzureCliCredential.