Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Po uzyskaniu tokenu dostępu przy użyciu Microsoft Authentication Library dla .NET (MSAL.NET) token jest buforowany. Gdy aplikacja potrzebuje tokenu, należy najpierw spróbować pobrać go z pamięci podręcznej.
Źródło tokenów można monitorować, sprawdzając AuthenticationResult.AuthenticationResultMetadata.TokenSource właściwość.
Witryny internetowe i internetowe interfejsy API
Witryny ASP.NET Core i klasyczne witryny ASP.NET powinny integrować się z Microsoft.Identity.Web, czyli nakładką na MSAL.NET. Buforowanie tokenów w pamięci lub rozproszone buforowanie tokenów można skonfigurować zgodnie z opisem w sekcji serializacja pamięci podręcznej tokenów.
Interfejsy API sieci Web w ASP.NET Core powinny korzystać z Microsoft.Identity.Web. Internetowe interfejsy API w wersji klasycznej ASP.NET używają biblioteki MSAL bezpośrednio, wywołując metodę AcquireTokenOnBehalfOf i należy skonfigurować pamięć lub rozproszone buforowanie. Aby uzyskać więcej informacji, zobacz Serializacja pamięci podręcznej tokenów w MSAL.NET. Nie ma powodu, by wywoływać interfejs API AcquireTokenSilent, skoro nie istnieje interfejs API do czyszczenia pamięci podręcznej. Rozmiar pamięci podręcznej można kontrolować, ustawiając zasady usuwania w bazowym magazynie pamięci podręcznej, takim jak MemoryCache, Redis itp.
Usługa internetowa/aplikacje demona
Aplikacje, które żądają tokenów dla tożsamości aplikacji, bez udziału użytkownika, przez wywołanie AcquireTokenForClient mogą polegać na wewnętrznym buforowaniu biblioteki MSAL, definiować buforowanie tokenów pamięci lub buforowanie tokenów rozproszonych. Aby uzyskać instrukcje i więcej informacji, zobacz Token cache serialization in MSAL.NET (Serializacja pamięci podręcznej tokenów w MSAL.NET).
Ponieważ żaden użytkownik nie jest zaangażowany, nie ma powodu, aby wywołać metodę AcquireTokenSilent.
AcquireTokenForClient sam sprawdzi pamięć podręczną, ponieważ nie ma interfejsu API do czyszczenia pamięci podręcznej. Rozmiar pamięci podręcznej jest proporcjonalny do liczby dzierżaw i zasobów, dla których są potrzebne tokeny. Rozmiarem pamięci podręcznej można zarządzać poprzez ustawienie zasad usuwania w bazowym magazynie pamięci podręcznej, takim jak MemoryCache, Redis itp.
Aplikacje komputerowe, wiersza polecenia i mobilne
Aplikacje komputerowe, wiersza polecenia i mobilne powinny najpierw wywołać metodę AcquireTokenSilent, aby sprawdzić, czy w pamięci podręcznej znajduje się prawidłowy token. W wielu przypadkach można uzyskać kolejny token z większą liczbą zakresów na podstawie tokenu w pamięci podręcznej. Istnieje również możliwość odświeżenia tokenu, gdy zbliża się do wygaśnięcia (ponieważ pamięć podręczna tokenu zawiera również token odświeżania).
W przypadku przepływów uwierzytelniania, które wymagają interakcji użytkownika, biblioteka MSAL buforuje tokeny dostępu, odświeżania i tożsamości oraz obiekt IAccount, który zawiera informacje o pojedynczym koncie. Dowiedz się więcej o IAccount. W przypadku przepływów aplikacyjnych, takich jak poświadczenia klienta, w pamięci podręcznej są przechowywane tylko tokeny dostępu, ponieważ obiekt IAccount i token tożsamości wymagają użytkownika, a token odświeżania nie ma zastosowania.
Zalecanym podejściem jest najpierw wywołać metodę AcquireTokenSilent. Jeśli AcquireTokenSilent nie powiedzie się, uzyskaj token innymi metodami.
W poniższym przykładzie aplikacja najpierw próbuje pozyskać token z pamięci podręcznej tokenów. Jeśli zostanie zgłoszony wyjątek MsalUiRequiredException, aplikacja interaktywnie pozyskuje 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
}
Czyszczenie pamięci podręcznej
W publicznych aplikacjach klienckich usunięcie kont z pamięci podręcznej spowoduje jego wyczyszczenie. Nie powoduje to jednak usunięcia pliku cookie sesji, który znajduje się w przeglądarce.
var accounts = (await app.GetAccountsAsync()).ToList();
// clear the cache
while (accounts.Any())
{
await app.RemoveAsync(accounts.First());
accounts = (await app.GetAccountsAsync()).ToList();
}