Konfigurowanie aplikacji do uznania tożsamości zarządzanej (wersja zapoznawcza)
W tym artykule opisano, jak skonfigurować aplikację Microsoft Entra, aby ufać tożsamości zarządzanej. Następnie możesz wymienić token tożsamości zarządzanej na token dostępu, który może uzyskiwać dostęp do chronionych zasobów Microsoft Entra bez konieczności używania ani zarządzania wpisami tajnych aplikacji.
Warunki wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz bezpłatne konto.
- To konto platformy Azure musi mieć uprawnienia do zarządzania aplikacjami, w szczególności do uprawnień aktualizacji. Każda z następujących ról firmy Microsoft Entra obejmuje wymagane uprawnienia:
- Znajomość pojęć związanych z tożsamościami zarządzanymi dla zasobów platformy Azure.
- Zarządzana tożsamość przypisana przez użytkownika, przypisana do zasobu obliczeniowego na platformie Azure (takiego jak maszyna wirtualna lub usługa Azure App Service), który hostuje obciążenie.
-
rejestracja aplikacji w usłudze Microsoft Entra ID. Ta rejestracja aplikacji musi należeć do tej samej dzierżawy co ta tożsamość zarządzana
- Jeśli potrzebujesz dostępu do zasobów w innej dzierżawie, rejestracja aplikacji musi być aplikacją wielodostępną i aprowizować aplikację w innej dzierżawie. Ponadto należy przyznać uprawnienia dostępu aplikacji do zasobów w tej dzierżawie. Dowiedz się więcej o tym, jak dodać aplikację wielodostępną w innych dzierżawach
- Rejestracja aplikacji musi mieć dostęp do chronionych zasobów firmy Microsoft (na przykład azure, Microsoft Graph, Microsoft 365 itp.). Ten dostęp można uzyskać za pośrednictwem uprawnień interfejsu API lub delegowanych uprawnień .
Ważne zagadnienia i ograniczenia
Aby utworzyć, zaktualizować lub usunąć poświadczenie tożsamości federacyjnej, konto wykonujące akcję musi mieć rolę administratora aplikacji , dewelopera aplikacji , administratora aplikacji w chmurze lub właściciela aplikacji. Uprawnienie microsoft.directory/applications/credentials/update jest wymagane do zaktualizowania poświadczeń tożsamości federacyjnej.
Do aplikacji lub tożsamości zarządzanej przypisanej przez użytkownika można dodać maksymalnie 20 poświadczeń tożsamości federacyjnej.
Podczas konfigurowania poświadczeń tożsamości federacyjnej należy podać kilka ważnych informacji:
wystawcy i podmiotu są kluczowymi informacjami potrzebnymi do skonfigurowania relacji zaufania. Kombinacja
issuer
isubject
musi być unikatowa w aplikacji. Gdy obciążenie platformy Azure żąda od platformy tożsamości firmy Microsoft wymiany tokenu tożsamości zarządzanej na token dostępu, wartości wystawcy i wartości podmiotu poświadczeń tożsamości federacyjnej są sprawdzane względem oświadczeńissuer
isubject
podanych w tokenie tożsamości zarządzanej. Jeśli sprawdzanie poprawności zakończy się pomyślnie, platforma tożsamości firmy Microsoft wystawia token dostępu do zewnętrznego obciążenia oprogramowania.wystawca jest adresem URL strony autorytetu Microsoft Entra w formacie
https://login.microsoftonline.com/{tenant}/v2.0
. Aplikacja Microsoft Entra i tożsamość zarządzana muszą należeć do tego samego dzierżawcy. Jeśli oświadczenieissuer
ma wiodące lub końcowe spacje w jego wartości, wymiana tokenów zostanie zablokowana.Ważny
Mimo że rejestracja aplikacji i tożsamość zarządzana muszą znajdować się w tej samej dzierżawie, jednostka usługi rejestracji aplikacji nadal może zrealizować token tożsamości zarządzanej.
Temat to identyfikator GUID, który jest identyfikatorem obiektu tożsamości zarządzanej (Principal ID) przypisanym do obciążenia Azure. Platforma tożsamości firmy Microsoft analizuje przychodzący token zewnętrzny i odrzuca wymianę tokenu dostępu, jeśli pole podmiotu
skonfigurowane w poświadczeniu tożsamości federacyjnej nie jest zgodne z identyfikatorem podmiotu tożsamości zarządzanej. W identyfikatorze GUID jest rozróżniana wielkość liter. -
Ważny
W tej funkcji można używać tylko tożsamości zarządzanych User-Assigned.
*lista odbiorców wyświetla grupy docelowe, które mogą pojawić się w zewnętrznym tokenie (wymagane). Musisz dodać pojedynczą wartość odbiorców, która ma limit 600 znaków. Wartość musi należeć do jednej z poniższych i musi odpowiadać wartości oświadczenia
aud
w tokenie tożsamości zarządzanej.-
chmura publiczna:
api://AzureADTokenExchange
-
Fairfax:
api://AzureADTokenExchangeUSGov
-
Mooncake:
api://AzureADTokenExchangeChina
-
USNat:
api://AzureADTokenExchangeUSNat
-
USSec:
api://AzureADTokenExchangeUSSec
Ważny
Jeśli przypadkowo dodasz nieprawidłowe informacje w wystawcy, podmiocie lub odbiorcach, poświadczenie tożsamości federacyjnej zostanie utworzone pomyślnie i bez błędu. Błąd nie jest widoczny, dopóki wymiana tokenów nie powiedzie się.
-
chmura publiczna:
nazwa jest unikatowym identyfikatorem poświadczeń tożsamości federacyjnej. (Wymagane) To pole ma limit znaków od 3 do 120 znaków i musi być przyjazny dla adresu URL. Obsługiwane są znaki alfanumeryczne, kreskowe lub podkreślenia, a pierwszy znak musi być tylko alfanumeryczny. Jest niezmienny po utworzeniu.
opis to podany przez użytkownika opis poświadczeń tożsamości federacyjnej (opcjonalnie). Opis nie jest weryfikowany ani sprawdzany przez identyfikator Entra firmy Microsoft. To pole ma limit 600 znaków.
Symbole wieloznaczne nie są obsługiwane w żadnej wartości właściwości poświadczeń tożsamości federacyjnej.
Pobierz identyfikator obiektu tożsamości zarządzanej
- Zaloguj się na Azure Portal.
- W polu wyszukiwania wprowadź Zarządzane tożsamości. W obszarze Serviceswybierz Tożsamości zarządzane.
- W ramach wymagań wstępnych wyszukaj i wybierz zarządzaną tożsamość przypisaną przez użytkownika, którą utworzyłeś.
- W okienku Przegląd skopiuj wartość identyfikatora obiektu (podmiotu zabezpieczeń). Ta wartość jest używana jako pole podmiotu w konfiguracji poświadczeń federacyjnych.
Konfigurowanie poświadczenia tożsamości federacyjnej w istniejącej aplikacji
W tej sekcji skonfigurujesz poświadczenie tożsamości federacyjnej w istniejącej aplikacji w celu zaufania tożsamości zarządzanej. Użyj poniższych zakładek, aby wybrać, jak skonfigurować poświadczenia tożsamości federacyjnej w istniejącej aplikacji.
- Centrum administracyjne firmy Microsoft Entra
- Azure CLI
- PowerShell
- interfejsy API
- Biceps
Zaloguj się do centrum administracyjnego Microsoft Entra. Sprawdź, czy jesteś w dzierżawie, w której zarejestrowano aplikację.
Przejdź do Identity>Applications>App registrations, a następnie wybierz aplikację w oknie głównym.
W obszarze Zarządzajwybierz pozycję certyfikaty & sekrety.
Wybierz kartę Poświadczenia federacyjne i wybierz pozycję Dodaj poświadczenie.
Z listy rozwijanej scenariusza poświadczeń federacyjnych
wybierz pozycję Inny wystawca i wypełnij wartości zgodnie z poniższą tabelą:Pole Opis Przykład Emitenta Adres URL wystawcy OAuth 2.0 / OIDC autorytetu Microsoft Entra ID. https://login.microsoftonline.com/{tenantID}/v2.0
Identyfikator podmiotu Identyfikator GUID tożsamości zarządzanej Principal ID
.aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb
Nazwa Unikatowa opisowa nazwa poświadczenia. msi-webapp1 Opis (opcjonalnie) Opis poświadczenia tożsamości federacyjnej dostarczony przez użytkownika. ufaj obciążeniom UAMI, aby personifikować aplikacji Audiencja Wartość docelowej grupy odbiorców, która musi wystąpić w tokenie zewnętrznym. • chmury publicznej: api://AzureADTokenExchange
• Fairfax: api://AzureADTokenExchangeUSGov
• Mooncake: api://AzureADTokenExchangeChina
• USNat: api://AzureADTokenExchangeUSNat
• USSec: api://AzureADTokenExchangeUSSec
Aktualizowanie kodu aplikacji w celu żądania tokenu dostępu
Poniższe przykłady kodu w poniższej tabeli przedstawiają przepływy poświadczeń klienta "usługa do usługi". Jednak zarządzane tożsamości jako poświadczenia domyślne mogą być używane w innych przepływach uwierzytelniania, takich jak przepływy OBO (On-Behalf-Of). Przykłady są prawidłowe w obu przypadkach, gdy zasoby są w tej samej dzierżawie co rejestracja aplikacji i tożsamość zarządzana albo w innej dzierżawie.
Azure.Identity
W poniższym przykładzie pokazano, jak nawiązać połączenie z kontenerem usługi Azure Storage przy użyciu Azure.Identity
, ale można go dostosować w celu uzyskania dostępu do dowolnego zasobu chronionego przez firmę Microsoft Entra. Przykłady są prawidłowe w obu przypadkach, gdy dzierżawca zasobów znajduje się w tej samej dzierżawie co rejestracja aplikacji i tożsamość zarządzana, lub gdy są one w innej dzierżawie.
using Azure.Identity;
using Azure.Storage.Blobs;
internal class Program
{
// This example demonstrates how to access an Azure blob storage account by utilizing the manage identity credential.
static void Main(string[] args)
{
string storageAccountName = "YOUR_STORAGE_ACCOUNT_NAME";
string containerName = "CONTAINER_NAME";
// The application must be granted access on the target resource
string appClientId = "YOUR_APP_CLIENT_ID";
// The tenant where the target resource is created, in this example, the storage account tenant
// If the resource tenant different from the app tenant, your app needs to be
string resourceTenantId = "YOUR_RESOURCE_TENANT_ID";
// The managed identity which you configured as a Federated Identity Credential (FIC)
string miClientId = "YOUR_MANAGED_IDENTITY_CLIENT_ID";
// Audience value must be one of the below values depending on the target cloud.
// Public cloud: api://AzureADTokenExchange
// Fairfax: api://AzureADTokenExchangeUSGov
// Mooncake: api://AzureADTokenExchangeChina
// USNat: api://AzureADTokenExchangeUSNat
// USSec: api://AzureADTokenExchangeUSSec
string audience = "api://AzureADTokenExchange";
// 1. Create an assertion with the managed identity access token, so that it can be exchanged an app token
var miCredential = new ManagedIdentityCredential(managedIdentityClientId);
ClientAssertionCredential assertion = new(
tenantId,
appClientId,
async (token) =>
{
// fetch Managed Identity token for the specified audience
var tokenRequestContext = new Azure.Core.TokenRequestContext(new[] { $"{audience}/.default" });
var accessToken = await miCredential.GetTokenAsync(tokenRequestContext).ConfigureAwait(false);
return accessToken.Token;
});
// 2. The assertion can be used to obtain an App token (taken care of by the SDK)
var containerClient = new BlobContainerClient(new Uri($"https://{storageAccountName}.blob.core.windows.net/{containerName}"), assertion);
await foreach (BlobItem blob in containerClient.GetBlobsAsync())
{
// TODO: perform operations with the blobs
BlobClient blobClient = containerClient.GetBlobClient(blob.Name);
Console.WriteLine($"Blob name: {blobClent.Name}, uri: {blobClient.Uri}");
}
}
}
Microsoft.Identity.Web
W Microsoft.Identity.Webaplikacja internetowa lub internetowy interfejs API może zastąpić certyfikat klienta podpisaną asercją klienta na potrzeby uwierzytelniania. W aplikacji możesz zaktualizować sekcję ClientCredentials
w appsettings.json do następującej konfiguracji:
{
"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"
}
]
}
}
MSAL (.NET)
W biblioteki MSAL można użyć klasy ManagedClientApplication w celu uzyskania tokenu tożsamości zarządzanej. Ten token może być następnie używany jako asercja klienta podczas konstruowania poufnej aplikacji klienckiej.
Ostrzeżenie
W przypadku aplikacji platformy .NET zdecydowanie zalecamy używanie bibliotek wyższego poziomu opartych na bibliotece MSAL, takich jak Microsoft.Identity.Web lub Azure.Identity.
using Microsoft.Identity.Client;
using Azure.Storage.Blobs;
using Azure.Core;
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";
// 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 client = 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}");
}
}
}