Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Al adquirir un token de acceso mediante el Biblioteca de autenticación de Microsoft para .NET (MSAL.NET), el token se almacena en caché. Cuando la aplicación necesita un token, primero debe intentar capturarlo de la memoria caché.
Puede supervisar el origen de los tokens inspeccionando la AuthenticationResult.AuthenticationResultMetadata.TokenSource propiedad .
Sitios web y API web
ASP.NET Core y ASP.NET sitios web clásicos deben integrarse con Microsoft. Identity.Web, un contenedor para MSAL.NET. El almacenamiento en caché de tokens de memoria o el almacenamiento en caché de tokens distribuidos se pueden configurar como se describe en serialización de caché de tokens.
Las API web de ASP.NET Core deben usar Microsoft. Identity.Web. Las API web en ASP.NET clásico, usan MSAL directamente, llamando a AcquireTokenOnBehalfOf y deben configurar la memoria o el almacenamiento en caché distribuido. Para más información, consulte Serialización de la caché de tokens en MSAL.NET. No hay ninguna razón para llamar a la AcquireTokenSilent API, ya que no hay ninguna API para borrar la memoria caché. El tamaño de caché se puede administrar estableciendo directivas de expulsión en el almacén de caché subyacente, como MemoryCache, Redis, etc.
Aplicaciones de servicio web y de demonio
Las aplicaciones que solicitan tokens para una identidad de aplicación, sin ningún usuario implicado, al llamar AcquireTokenForClient pueden depender del almacenamiento en caché interno de MSAL, definir su propio almacenamiento en caché de tokens de memoria o almacenamiento en caché de tokens distribuidos. Para obtener instrucciones y más información, consulte Serialización de caché de tokens en MSAL.NET.
Dado que no interviene ningún usuario, no hay motivo para llamar a AcquireTokenSilent.
AcquireTokenForClient buscará en la memoria caché por su cuenta, ya que no hay ninguna API para borrar la memoria caché. El tamaño de caché es proporcional al número de inquilinos y recursos para los que necesita tokens. El tamaño de caché se puede administrar estableciendo directivas de expulsión en el almacén de caché subyacente, como MemoryCache, Redis, etc.
Aplicaciones móviles, de línea de comandos y de escritorio
Las aplicaciones móviles, de línea de comandos y de escritorio deben llamar primero al AcquireTokenSilent método para comprobar si un token aceptable está en la memoria caché. En muchos casos, es posible adquirir otro token con más ámbitos basados en un token de la memoria caché. También es posible actualizar un token cuando se acerca a la expiración (ya que la caché de tokens también contiene un token de actualización).
Para los flujos de autenticación que requieren una interacción del usuario, MSAL almacena en caché los tokens de acceso, actualización e identificador, y el IAccount objeto , que representa información sobre una sola cuenta. Más información sobre IAccount. En el caso de los flujos de aplicación, como las credenciales de cliente, solo se almacenan en caché los tokens de acceso, ya que el IAccount token de objeto e identificador requieren un usuario y el token de actualización no es aplicable.
El patrón recomendado es llamar primero al AcquireTokenSilent método . Si AcquireTokenSilent falla, obtenga un token mediante otros métodos.
En el ejemplo siguiente, la aplicación intenta primero adquirir un token de la caché de tokens. Si se produce una MsalUiRequiredException excepción, la aplicación adquiere un token de forma interactiva.
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
}
Borrar la memoria caché
En las aplicaciones cliente públicas, quitar las cuentas de la memoria caché lo borrará. Sin embargo, esto no quita la cookie de sesión, que está en el explorador.
var accounts = (await app.GetAccountsAsync()).ToList();
// clear the cache
while (accounts.Any())
{
await app.RemoveAsync(accounts.First());
accounts = (await app.GetAccountsAsync()).ToList();
}