Tokeny pro přístup k mezipaměti
Získání přístupového tokenu OAuth je poměrně nákladné, protože vyžaduje požadavek HTTP na koncový bod tokenu. Proto je dobré ukládat tokeny do mezipaměti, kdykoli je to možné. Knihovna Microsoft Authentication Library pro .NET (MSAL.NET) (MSAL) ukládá tokeny mezipaměti získané z Azure AD, včetně aktualizačních tokenů.
Mezi některé implementace patří MSAL mezipaměť v paměti a distribuovaná mezipaměť. Tato možnost je nastavena v metodě ConfigureServices třídy Startup webové aplikace. Pokud chcete získat token pro rozhraní API pro příjem dat, budete muset .EnableTokenAcquisitionToCallDownstreamApi() .
Aplikace pro průzkumy používá distribuovanou mezipaměť tokenů, která ukládá data do záložního úložiště. Aplikace jako záložní úložiště používá Redis Cache. Každá instance serveru v serverové farmě čte nebo zapisuje do stejné mezipaměti a tento přístup se škáluje na mnoho uživatelů.
pro webový server s jednou instancí můžete použít ASP.NET Core mezipaměti v paměti. (To je také dobrá možnost pro spuštění aplikace místně během vývoje.)
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(
options =>
{
Configuration.Bind("AzureAd", options);
options.Events = new SurveyAuthenticationEvents(loggerFactory);
options.SignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
options.Events.OnTokenValidated += options.Events.TokenValidated;
})
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamWebApi(configOptions.SurveyApi.Name, Configuration.GetSection("SurveyApi"))
.AddDistributedTokenCaches();
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = configOptions.Redis.Configuration;
options.InstanceName = "TokenCache";
});
}
Konfigurace pro SurveyApi je určena v souboru appSettings. JSON.
"SurveyApi": {
"BaseUrl": "https://localhost:44301",
"Scopes": "https://test.onmicrosoft.com/surveys.webapi/surveys.access",
"Name": "SurveyApi"
},
Šifrování tokenů uložených v mezipaměti
Tokeny jsou citlivá data, protože udělují přístup k prostředkům uživatele. (Navíc na rozdíl od hesla uživatele nemůžete jenom uložit hodnotu hash tokenu.) Proto je důležité chránit tokeny před ohrožením.
Mezipaměť zálohovanou Redis je chráněná heslem, ale pokud někdo získá heslo, mohl by získat všechny přístupové tokeny v mezipaměti. Mezipaměť tokenu MSAL je zašifrovaná.
Získání tokenu
Aplikace průzkumu volá webové rozhraní API pro příjem dat z konstruktoru stránky.
public class SurveyService : ISurveyService
{
private string _serviceName;
private readonly IDownstreamWebApi _downstreamWebApi;
public SurveyService(HttpClientService factory, IDownstreamWebApi downstreamWebApi, IOptions<ConfigurationOptions> configOptions)
{
_serviceName = configOptions.Value.SurveyApi.Name;
_downstreamWebApi = downstreamWebApi;
}
public async Task<SurveyDTO> GetSurveyAsync(int id)
{
return await _downstreamWebApi.CallWebApiForUserAsync<SurveyDTO>(_serviceName,
options =>
{
options.HttpMethod = HttpMethod.Get;
options.RelativePath = $"surveys/{id}";
});
}
}
Dalším způsobem je vložení ITokenAcquisition služby do kontroleru. Další informace najdete v tématu získání a ukládání tokenů do mezipaměti pomocí knihovny Microsoft Authentication Library (MSAL) .
Vzorek kódu