Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Quando adquire um token de acesso usando a Biblioteca de Autenticação da Microsoft for .NET (MSAL.NET), o token é armazenado em cache. Quando a aplicação precisa de um token, deve primeiro tentar recuperá-lo da cache.
Pode monitorizar a origem dos tokens inspecionando a AuthenticationResult.AuthenticationResultMetadata.TokenSource propriedade.
Sites e APIs Web
Os sites ASP.NET Core e ASP.NET Classic devem integrar o Microsoft.Identity.Web, um encapsulamento para o MSAL.NET. A cache de tokens de memória ou a cache de tokens distribuídos podem ser configuradas conforme descrito na serialização da cache de token.
As APIs Web no ASP.NET Core devem usar o Microsoft.Identity.Web. As APIs Web no ASP.NET classic usam MSAL diretamente, chamando AcquireTokenOnBehalfOf e devem configurar memória ou cache distribuída. Para obter mais informações, consulte Serialização de cache de token no MSAL.NET. Não há razão para chamar a AcquireTokenSilent API, pois não há API para limpar a cache. O tamanho da cache pode ser gerido definindo políticas de expulsão no armazenamento subjacente, como MemoryCache, Redis, etc.
Serviço Web / aplicações daemon
As aplicações que solicitam tokens para a identidade da aplicação, sem envolvimento do utilizador, ao chamar AcquireTokenForClient, podem recorrer à cache interna do MSAL, definir a sua própria cache de tokens em memória ou uma cache de tokens distribuída. Para instruções e mais informações, consulte Serialização da cache de tokens no MSAL.NET.
Como nenhum utilizador está envolvido, não há razão para chamar AcquireTokenSilent.
AcquireTokenForClient vou procurar na cache sozinha, pois não há API para limpar a cache. O tamanho do cache é proporcional ao número de inquilinos e recursos para os quais precisas de tokens. O tamanho da cache pode ser gerido definindo políticas de expulsão na cache store subjacente, como MemoryCache, Redis, etc.
Aplicações de ambiente de trabalho, linha de comandos e móveis
Aplicações de ambiente de trabalho, linha de comandos e móveis devem primeiro chamar o AcquireTokenSilent método para verificar se existe um token aceitável na cache. Em muitos casos, é possível obter outro token com mais âmbitos com base num token em cache. Também é possível atualizar um token quando está perto do prazo de expiração (já que a cache do token também contém um token de atualização).
Para fluxos de autenticação que requerem uma interação do utilizador, o MSAL armazena em cache os tokens de acesso, atualização e ID, bem como o IAccount objeto, que representa informação sobre uma única conta. Saiba mais sobre o IAccount. Para fluxos de aplicação, como credenciais de cliente, apenas os tokens de acesso são armazenados em cache, porque o IAccount objeto e o token ID requerem um utilizador, e o token de atualização não é aplicável.
O padrão recomendado é chamar primeiro o AcquireTokenSilent método. Se AcquireTokenSilent falhar, então adquire um token usando outros métodos.
No exemplo seguinte, a aplicação tenta primeiro adquirir um token da cache de tokens. Se for lançada uma MsalUiRequiredException exceção, a aplicação adquire um token de forma interativa.
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
}
Limpar a cache
Nas aplicações cliente públicas, remover contas da memória cache limpará a memória cache. No entanto, isto não remove o cookie da sessão, que está no navegador.
var accounts = (await app.GetAccountsAsync()).ToList();
// clear the cache
while (accounts.Any())
{
await app.RemoveAsync(accounts.First());
accounts = (await app.GetAccountsAsync()).ToList();
}