Microsoft.Identity.Web abstraheert de complexiteit van MSAL.NET. Het biedt u API's op een hoger niveau die de interne functies van MSAL.NET voor u verwerken, zoals het verwerken van fouten met voorwaardelijke toegang, opslaan in cache.
Hier volgt de Program.cs van de daemon-app die een downstream-API aanroept:
C#
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;
// In the Program.cs, acquire a token for your downstream APIvar tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
tokenAcquirerFactory.Services.AddDownstreamApi("MyApi",
tokenAcquirerFactory.Configuration.GetSection("MyWebApi"));
var sp = tokenAcquirerFactory.Build();
var api = sp.GetRequiredService<IDownstreamApi>();
var result = await api.GetForAppAsync<IEnumerable<TodoItem>>("MyApi");
Console.WriteLine($"result = {result?.Count()}");
Hier volgt de Program.cs van een daemon-app die Microsoft Graph aanroept:
C#
var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
tokenAcquirerFactory.Services.AddMicrosoftGraph();
var serviceProvider = tokenAcquirerFactory.Build();
try
{
GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
.GetAsync(r => r.Options.WithAppOnly());
Console.WriteLine($"{users.Count} users");
Console.ReadKey();
}
catch (Exception ex) { Console.WriteLine("We could not retrieve the user's list: " + $"{ex}"); }
Java
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// Set the appropriate header fields in the request header.
conn.setRequestProperty("Authorization", "Bearer " + accessToken);
conn.setRequestProperty("Accept", "application/json");
String response = HttpClientHelper.getResponseStringFromConn(conn);
int responseCode = conn.getResponseCode();
if(responseCode != HttpURLConnection.HTTP_OK) {
thrownew IOException(response);
}
JSONObject responseObject = HttpClientHelper.processResponse(responseCode, response);
Als een HTTP-client zoals Axios wordt gebruikt, roep de API-eindpunt-URI dan aan met een toegangstoken als autorisatiebearer.
endpoint = "url to the API"
http_headers = {'Authorization': 'Bearer ' + result['access_token'],
'Accept': 'application/json',
'Content-Type': 'application/json'}
data = requests.get(endpoint, headers=http_headers, stream=False).json()
AuthenticationResult-eigenschappen in MSAL.NET
De methoden om tokens te verkrijgen retourneren AuthenticationResult. Voor niet-synchrone methoden wordt Task<AuthenticationResult> geretourneerd.
In MSAL.NET stelt AuthenticationResult het volgende beschikbaar:
AccessToken voor de web-API voor toegang tot bronnen. Deze parameter is een tekenreeks, meestal een met Base64 gecodeerde JWT. De client mag nooit in het toegangstoken kijken. De indeling is niet gegarandeerd stabiel en kan worden versleuteld voor gebruik met de resource. Het schrijven van code die afhankelijk is van de inhoud van het toegangstoken op de client, is een van de grootste bronnen van fouten en onderbrekingen van clientlogica. Zie Toegangstokens voor meer informatie.
IdToken voor de gebruiker. Deze parameter is een gecodeerde JWT. Zie ID-tokens voor meer informatie.
ExpiresOn geeft de datum en tijd aan waarop het token verloopt.
TenantId bevat de tenant waarin de gebruiker is gevonden. Voor gastgebruikers in Microsoft Entra B2B-scenario's is de tenant-id de gasttenant, niet de unieke tenant.
Wanneer de token voor een gebruiker wordt geleverd, bevat AuthenticationResult ook informatie over deze gebruiker. Voor vertrouwelijke clientstromen waarbij tokens worden aangevraagd zonder gebruiker voor de toepassing, is deze gebruikersinformatie null.
De Scopes waarvoor de token is uitgegeven.
De unieke id voor de gebruiker.
IAccount
MSAL.NET definieert het begrip van een account via de IAccount-interface. Deze belangrijke wijziging biedt de juiste semantiek. Dezelfde gebruiker kan verschillende accounts hebben, in verschillende Microsoft Entra-mappen. MSAL.NET biedt ook betere informatie in het geval van gastscenario's, omdat informatie over het homeaccount wordt verstrekt.
Het volgende diagram toont de structuur van de IAccount-interface.
De klasse AccountId identificeert een account in een specifieke tenant met de eigenschappen in de volgende tabel.
Eigenschap
Beschrijving
TenantId
Een tekenreeksweergave voor een GUID, wat de id is van de tenant waarin het account zich bevindt.
ObjectId
Een tekenreeksweergave voor een GUID, wat de id is van de gebruiker die het account in de tenant bezit.
Identifier
Unieke id voor het account.
Identifier is de samenvoeging van ObjectId en TenantId gescheiden door een komma. Deze zijn niet met Base64 gecodeerd.
De IAccount-interface vertegenwoordigt informatie over één account. Dezelfde gebruiker kan aanwezig zijn in verschillende tenants. Dit betekent dat een gebruiker meerdere accounts kan hebben. De leden ervan worden weergegeven in de volgende tabel.
Eigenschap
Beschrijving
Username
Een tekenreeks die de weergavewaarde bevat in UPN-indeling (UserPrincipalName), bijvoorbeeld john.doe@contoso.com. Deze tekenreeks kan null zijn, in tegenstelling tot HomeAccountId en HomeAccountId.Identifier, die niet null zijn. Deze eigenschap vervangt de DisplayableId-eigenschap van IUser in eerdere versies van MSAL.NET.
Environment
Een tekenreeks die de id-provider voor dit account bevat, bijvoorbeeld login.microsoftonline.com. Deze eigenschap vervangt de eigenschap IdentityProvider van IUser, behalve dat IdentityProvider ook informatie over de tenant had, naast de cloudomgeving. Hier is de waarde alleen de host.
HomeAccountId
De account-id van het homeaccount voor de gebruiker. Deze eigenschap identificeert de gebruiker uniek in Microsoft Entra-tenants.
Het token gebruiken om een beveiligde API aan te roepen
Nadat AuthenticationResult is geretourneerd door MSAL in result, voegt u deze toe aan de HTTP-autorisatieheader voordat u de aanroep uitvoert voor toegang tot de beveiligde web-API.
C#
httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
// Call the web API.
HttpResponseMessage response = await _httpClient.GetAsync(apiUri);
...
Meerdere API's aanroepen
Voor daemon-apps moeten de web-API's die u aanroept vooraf worden goedgekeurd. Er is geen incrementele toestemming bij daemontoepassingen. (Er is geen gebruikersinteractie.) De tenantbeheerder moet vooraf toestemming geven voor de toepassing en alle API-machtigingen. Als u meerdere API's wilt aanroepen, moet u voor elke resource een token verkrijgen, telkens wanneer u AcquireTokenForClient aanroept. MSAL gebruikt de cache van het toepassingstoken om onnodige service-aanroepen te voorkomen.
Volgende stappen
Meer informatie vindt u door een React-toepassing met één pagina (SPA) te bouwen waarmee gebruikers worden aangemeld in de volgende reeks meerdelige zelfstudies.
When building apps for work, you typically integrate with secured APIs. Learn about the two common ways of how APIs are secured – API key and OAuth2, and how to integrate with them when building an API plugin for declarative agents that run in Microsoft 365 Copilot.
Demonstreer de functies van Microsoft Entra ID om identiteitsoplossingen te moderniseren, hybride oplossingen te implementeren en identiteitsbeheer te implementeren.
Leer hoe u toegang krijgt tot beveiligde web-API's in daemons, services en niet-interactieve scripts met onze quickstarts, zelfstudies en uitgebreide handleidingen.
In deze quickstart leert u hoe een .NET-consoletoepassing een toegangstoken kan krijgen om de Microsoft Graph API aan te roepen en een lijst met gebruikers in de map weer te geven. De toepassing is een daemon-toepassing, een vertrouwelijke clienttoepassing.
In deze zelfstudie leert u hoe u een ASP.NET web-API aanroept die wordt beveiligd door Microsoft Entra ID vanuit een Windows-bureaubladtoepassing (WPF). De WPF-client verifieert een gebruiker, vraagt een toegangstoken aan en roept de web-API aan.
In deze quickstart leert u hoe een Java-app een toegangstoken kan ophalen en een API kan aanroepen die wordt beveiligd door het Microsoft Identity Platform-eindpunt, met behulp van de eigen identiteit van de app
In deze quickstart downloadt en voert u een codevoorbeeld uit dat laat zien hoe een Node.js consoletoepassing een toegangstoken kan ophalen en een API kan aanroepen die wordt beveiligd door een Microsoft Identity Platform-eindpunt, met behulp van de eigen identiteit van de app