Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak nakonfigurovat aplikaci Microsoft Entra tak, aby důvěřovala spravované identitě. Token spravované identity pak můžete vyměnit za přístupový token, který má přístup k prostředkům chráněným Microsoft Entra, aniž byste museli používat nebo spravovat tajné kódy aplikací.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Tento účet Azure musí mít oprávnění k aktualizaci přihlašovacích údajů aplikace. Kterákoli z následujících rolí Microsoft Entra zahrnuje potřebná oprávnění:
- Správce aplikace
- Vývojář aplikace
- správce cloudových aplikací
- Porozumění konceptům o spravovaných identitách pro prostředky Azure.
- Spravovaná identita přiřazená uživatelem přiřazená k výpočetnímu prostředku Azure (například virtuálnímu počítači nebo službě Azure App Service), která hostuje vaši úlohu.
-
Registrace aplikace v Microsoft Entra ID. Tato registrace aplikace musí patřit do stejného klienta jako spravovaná identita.
- Pokud potřebujete získat přístup k prostředkům v jiném tenantovi, musí být registrace aplikace víceklientská aplikace a zřízená v jiném tenantovi. Přečtěte si, jak přidat víceklientskou aplikaci do jiných tenantů.
- Registrace aplikace musí mít udělený přístup k prostředkům chráněným Microsoft Entra (například Azure, Microsoft Graph, Microsoft 365 atd.). Tento přístup je možné udělit prostřednictvím oprávnění rozhraní API nebo delegovaných oprávnění.
Důležité aspekty a omezení
Pro vytvoření, aktualizaci nebo odstranění pověření federované identity musí účet, který akci provádí, mít roli Správce aplikací, Vývojář aplikací, Správce cloudových aplikacínebo Vlastník aplikace. Je vyžadováno oprávnění microsoft.directory/applications/credentials/update k aktualizaci přihlašovacích údajů federované identity.
Do aplikace nebo spravované identity přiřazené uživatelem je možné přidat maximálně 20 přihlašovacích údajů federované identity.
Při konfiguraci přihlašovacích údajů federované identity je k dispozici několik důležitých informací:
vystavitele, předmět jsou klíčové informace potřebné k nastavení vztahu důvěryhodnosti. Když úloha Azure požádá platformu Microsoft Identity Platform o výměnu tokenu spravované identity za přístupový token aplikace Entra, kontrolují se hodnoty vystavitele a subjektu přihlašovacích údajů federované identity proti
issuerasubjectdeklaracím poskytnutým v tokenu spravované identity. Pokud kontrola ověření projde, platforma Microsoft Identity Platform vydá přístupový token pro úlohy externího softwaru.vystavitel je URL autority tenanta Microsoft Entra ve formě
https://login.microsoftonline.com/{tenant}/v2.0. Aplikace Microsoft Entra i spravovaná identita musí patřit do stejného tenanta. Pokud deklarace identityissuerobsahuje počáteční nebo koncové prázdné znaky v hodnotě, výměna tokenů se zablokuje.subject: Toto je identifikátor GUID rozlišující malá a velká písmena ID objektu (principal) spravované identity přiřazeného k úloze Azure. Spravovaná identita musí být ve stejném tenantu jako registrace aplikace, i když je cílový zdroj v jiném cloudu. Platforma Microsoft Identity odmítne výměnu tokenu, pokudsubjectv konfiguraci přihlašovacích údajů federované identity přesně neodpovídá ID Principála spravované identity.Publikum specifikuje hodnotu, která se zobrazí v
auddeklaraci v tokenu spravované identity (povinné). Hodnota musí být jedna z následujících v závislosti na cílovém cloudu.-
Globální služba Microsoft Entra ID:
api://AzureADTokenExchange -
Microsoft Entra ID pro státní správu USA:
api://AzureADTokenExchangeUSGov -
Microsoft Entra China provozovaný společností 21Vianet:
api://AzureADTokenExchangeChina
Důležité
Přístup k prostředkům v jiném tenantovi se podporuje. Přístup k prostředkům v jiném cloudu se nepodporuje. Požadavky na tokeny do jiných cloudů selžou.
Důležité
Pokud omylem přidáte nesprávné informace v nastavení vystavitele, předmětu nebo cílové skupiny, přihlašovací údaje federované identity se přesto úspěšně vytvoří bez chyby. Tato chyba se neprojeví, dokud se výměna tokenu nezdaří.
-
Globální služba Microsoft Entra ID:
název je jedinečný identifikátor přihlašovacích údajů federované identity. (Povinné) Toto pole má limit znaků 3–120 znaků a musí být popisný pro adresu URL. Podporují se alfanumerické znaky, pomlčky nebo podtržítka a první znak musí být jenom alfanumerický. Po vytvoření je neměnný.
popis je popis přihlašovacích údajů federované identity (volitelné). Popis se neověřuje ani nekontroluje podle ID Microsoft Entra. Toto pole má limit 600 znaků.
Zástupné znaky nejsou podporovány v žádné z hodnot vlastností přihlašovacích údajů o federované identitě.
Konfigurace přihlašovacích údajů federované identity v aplikaci
V této části nakonfigurujete přihlašovací údaje federované identity v existující aplikaci tak, aby důvěřovaly spravované identitě. Na následujících kartách můžete zvolit, jak nakonfigurovat přihlašovací údaje federované identity v existující aplikaci.
Přihlaste se do Centra pro správu Microsoft Entra. Zkontrolujte, že jste v tenantovi, ve kterém je vaše aplikace zaregistrovaná.
Přejděte kregistracím aplikace> a v hlavním okně vyberte svou aplikaci.
V části Spravovat vyberte Certifikáty a tajné kódy.
Vyberte kartu Federované přihlašovací údaje a vyberte Přidat přihlašovací údaje.
V rozevíracím seznamu Scénář federovaných přihlašovacích údajů vyberte Spravovanou identitu a vyplňte hodnoty podle následující tabulky:
(No improvements necessary, the translation is already optimal.) Popis Příklad Vydavatel Adresa URL autority Microsoft Entra ID pro vystavování tokenu spravované identity pomocí OAuth 2.0 / OIDC. Tato hodnota se automaticky naplní aktuálním vystavitelem tenanta Entra. https://login.microsoftonline.com/{tenantID}/v2.0Výběr spravované identity Kliknutím na tento odkaz vyberte spravovanou identitu, která bude fungovat jako přihlašovací údaje federované identity. Jako přihlašovací údaje můžete používat pouze spravované identity User-Assigned. msi-webapp1 Popis (volitelné) Popis přihlašovacích údajů federované identity zadaný uživatelem. Důvěřovat UAMI úlohám jako přihlašovacímu údaji mé aplikace Obecenstvo Hodnota cílové skupiny, která se musí objevit v externím tokenu. Musí být nastavená na jednu z následujících hodnot:
• Globální služba Entra ID: api://AzureADTokenExchange
• Entra ID pro státní správu USA: api://AzureADTokenExchangeUSGov
• Entra ID Čína provozovaná společností 21Vianet: api://AzureADTokenExchangeChina
Aktualizace kódu aplikace pro vyžádání přístupového tokenu
Následující fragmenty kódu ukazují, jak získat token spravované identity a použít ho jako přihlašovací údaje pro vaši aplikaci Entra. Ukázky jsou platné v obou případech, kdy je cílový prostředek buď ve stejném tenantovi jako aplikace Entra, nebo v jiném tenantovi.
Klientské knihovny Azure Identity
Následující ukázky kódu ukazují přístup k tajnému kódu služby Azure Key Vault, ale dají se přizpůsobit pro přístup k jakémukoli prostředku chráněnému microsoftem Entra.
using Azure.Core;
using Azure.Identity;
using Azure.Security.KeyVault.Secrets;
// Audience value must be one of the below values depending on the target cloud:
// - Entra ID Global cloud: api://AzureADTokenExchange
// - Entra ID US Government: api://AzureADTokenExchangeUSGov
// - Entra ID China operated by 21Vianet: api://AzureADTokenExchangeChina
string miAudience = "api://AzureADTokenExchange";
// Create an assertion with the managed identity access token, so that it can be
// exchanged for an app token. Client ID is passed here. Alternatively, either
// object ID or resource ID can be passed.
ManagedIdentityCredential miCredential = new(
ManagedIdentityId.FromUserAssignedClientId("<YOUR_MI_CLIENT_ID>"));
TokenRequestContext tokenRequestContext = new([$"{miAudience}/.default"]);
ClientAssertionCredential clientAssertionCredential = new(
"<YOUR_RESOURCE_TENANT_ID>",
"<YOUR_APP_CLIENT_ID>",
async _ =>
(await miCredential
.GetTokenAsync(tokenRequestContext)
.ConfigureAwait(false)).Token
);
// Create a new SecretClient using the assertion
SecretClient client = new(
new Uri("https://testfickv.vault.azure.net/"),
clientAssertionCredential);
// Retrieve the secret
KeyVaultSecret secret = client.GetSecret("<SECRET_NAME>");
Microsoft.Identity.Web
Ve službě Microsoft.Identity.Web můžete nastavit ClientCredentials oddíl ve svém appsettings.json tak, aby umožňoval použití SignedAssertionFromManagedIdentity kódu s nakonfigurovanou spravovanou identitou jako přihlašovacích údajů:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"ClientId": "YOUR_APPLICATION_ID",
"TenantId": "YOUR_TENANT_ID",
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity",
"ManagedIdentityClientId": "YOUR_USER_ASSIGNED_MANAGED_IDENTITY_CLIENT_ID",
"TokenExchangeUrl": "api://AzureADTokenExchange/.default"
}
]
}
}
MSAL (.NET)
V MSAL můžete pomocí třídy ManagedClientApplication získat token spravované identity. Tento token lze následně použít jako klientské tvrzení při vytváření důvěrné klientské aplikace.
using Microsoft.Identity.Client;
using Microsoft.Identity.Client.AppConfig;
using Azure.Storage.Blobs;
using Azure.Core;
using Azure.Storage.Blobs.Models;
internal class Program
{
static async Task Main(string[] args)
{
string storageAccountName = "YOUR_STORAGE_ACCOUNT_NAME";
string containerName = "CONTAINER_NAME";
string appClientId = "YOUR_APP_CLIENT_ID";
string resourceTenantId = "YOUR_RESOURCE_TENANT_ID";
Uri authorityUri = new($"https://login.microsoftonline.com/{resourceTenantId}");
string miClientId = "YOUR_MI_CLIENT_ID";
string audience = "api://AzureADTokenExchange/.default";
// Get mi token to use as assertion
var miAssertionProvider = async (AssertionRequestOptions _) =>
{
var miApplication = ManagedIdentityApplicationBuilder
.Create(ManagedIdentityId.WithUserAssignedClientId(miClientId))
.Build();
var miResult = await miApplication.AcquireTokenForManagedIdentity(audience)
.ExecuteAsync()
.ConfigureAwait(false);
return miResult.AccessToken;
};
// Create a confidential client application with the assertion.
IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(appClientId)
.WithAuthority(authorityUri, false)
.WithClientAssertion(miAssertionProvider)
.WithCacheOptions(CacheOptions.EnableSharedCacheOptions)
.Build();
// Get the federated app token for the storage account
string[] scopes = [$"https://{storageAccountName}.blob.core.windows.net/.default"];
AuthenticationResult result = await app.AcquireTokenForClient(scopes).ExecuteAsync().ConfigureAwait(false);
TokenCredential tokenCredential = new AccessTokenCredential(result.AccessToken);
var containerClient = new BlobContainerClient(
new Uri($"https://{storageAccountName}.blob.core.windows.net/{containerName}"),
tokenCredential);
await foreach (BlobItem blob in containerClient.GetBlobsAsync())
{
// TODO: perform operations with the blobs
BlobClient blobClient = containerClient.GetBlobClient(blob.Name);
Console.WriteLine($"Blob name: {blobClient.Name}, URI: {blobClient.Uri}");
}
}
}