Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Wanneer u een toegangstoken verkrijgt met behulp van de Microsoft Authentication Library voor .NET (MSAL.NET), wordt het token in de cache opgeslagen. Wanneer de toepassing een token nodig heeft, moet deze eerst proberen het op te halen uit de cache.
U kunt de bron van de tokens controleren door de AuthenticationResult.AuthenticationResultMetadata.TokenSource eigenschap te inspecteren.
Websites en web-API’s
ASP.NET Core en ASP.NET klassieke websites moeten worden geïntegreerd met Microsoft. Identity.Web, een wrapper voor MSAL.NET. Cacheopslag van geheugentoken of gedistribueerde tokencaching kan worden geconfigureerd zoals beschreven in serialisatie van tokencaches.
Web-API’s op ASP.NET Core moeten Microsoft.Identity.Web gebruiken. Web-API’s op klassiek ASP.NET gebruiken MSAL rechtstreeks door AcquireTokenOnBehalfOf aan te roepen en moeten geheugencaching of gedistribueerde caching configureren. Zie Tokencacheserialisatie in MSAL.NET voor meer informatie. Er is geen reden om de AcquireTokenSilent API aan te roepen omdat er geen API is om de cache te wissen. De cachegrootte kan worden beheerd door verwijderingsbeleid in te stellen voor het onderliggende cachearchief, zoals MemoryCache, Redis, enzovoort.
Webservice/Daemon-apps
Toepassingen die tokens aanvragen voor een toepassingsidentiteit, zonder dat er een gebruiker bij betrokken is, door AcquireTokenForClient aan te roepen, kunnen ofwel vertrouwen op de interne tokencache van MSAL, ofwel hun eigen tokencaching in het geheugen definiëren of gedistribueerde tokencaching gebruiken. Zie Tokencacheserialisatie in MSAL.NET voor instructies en meer informatie.
Aangezien er geen gebruiker betrokken is, is er geen reden om aan te roepen AcquireTokenSilent.
AcquireTokenForClient kijkt zelf in de cache, omdat er geen API is om de cache te wissen. Cachegrootte is proportioneel met het aantal tenants en resources waarvoor u tokens nodig hebt. De cachegrootte kan worden beheerd door verwijderingsbeleid in te stellen voor het onderliggende cachearchief, zoals MemoryCache, Redis, enzovoort.
Desktop-, opdrachtregel- en mobiele toepassingen
Desktop-, opdrachtregel- en mobiele toepassingen moeten eerst de AcquireTokenSilent methode aanroepen om te controleren of een acceptabel token zich in de cache bevindt. In veel gevallen is het mogelijk om een ander token te verkrijgen met meer machtigingen op basis van een token dat al in de cache staat. Het is ook mogelijk om een token te vernieuwen wanneer het bijna verloopt (omdat de tokencache ook een vernieuwingstoken bevat).
Voor verificatiestromen waarvoor gebruikersinteractie is vereist, slaat MSAL de toegangs-, vernieuwings- en id-tokens en het IAccount object op, dat informatie over één account vertegenwoordigt. Meer informatie over IAccount. Voor toepassingsstromen, zoals clientreferenties, worden alleen toegangstokens in de cache opgeslagen, omdat voor het object en id-token IAccount een gebruiker is vereist en het vernieuwingstoken niet van toepassing is.
Het aanbevolen patroon is om eerst de AcquireTokenSilent methode aan te roepen. Als AcquireTokenSilent dit mislukt, verkrijgt u een token met behulp van andere methoden.
In het volgende voorbeeld probeert de toepassing eerst een token te verkrijgen uit de tokencache. Als er een MsalUiRequiredException uitzondering optreedt, verkrijgt de toepassing interactief een token.
var accounts = await app.GetAccountsAsync();
AuthenticationResult result = null;
try
{
result = await app.AcquireTokenSilent(scopes, accounts.FirstOrDefault())
.ExecuteAsync();
}
catch (MsalUiRequiredException ex)
{
// A MsalUiRequiredException happened on AcquireTokenSilent.
// This indicates you need to call AcquireTokenInteractive to acquire a token
Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
try
{
result = await app.AcquireTokenInteractive(scopes)
.ExecuteAsync();
}
catch (MsalException msalex)
{
ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
}
}
catch (Exception ex)
{
ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
return;
}
if (result != null)
{
string accessToken = result.AccessToken;
// Use the token
}
De cache wissen
In openbare clienttoepassingen wordt de cache leeggemaakt door accounts eruit te verwijderen. Hiermee wordt echter niet de sessiecooky verwijderd, die zich in de browser bevindt.
var accounts = (await app.GetAccountsAsync()).ToList();
// clear the cache
while (accounts.Any())
{
await app.RemoveAsync(accounts.First());
accounts = (await app.GetAccountsAsync()).ToList();
}