Önbellek erişim belirteçleri
Belirteç uç noktasına HTTP isteği gerektirdiği için OAuth erişim belirteci almak görece pahalıdır. Bu nedenle, mümkün olduğunca belirteçleri önbelleğe almak iyi bir fikirdir. .NET (MSAL.NET) (MSAL) için Microsoft Kimlik Doğrulama Kitaplığı, yenileme belirteçleri de dahil olmak üzere Azure AD'den alınan belirteçleri önbelleğe alır.
Bazı uygulamalar MSAL'nin bellek içinde önbellek ve dağıtılmış önbellek olduğunu içerir. Bu seçenek, web uygulamasının Başlangıç sınıfının ConfigureServices yönteminde ayarlanır. Aşağı akış API'si için belirteç almak için .EnableTokenAcquisitionToCallDownstreamApi() gerekir.
Surveys uygulaması, verileri arka depoda depolana dağıtılmış belirteç önbelleğini kullanır. Uygulama, destek deposu olarak bir Redis önbelleği kullanır. Sunucu grubu içinde yer alan her sunucu örneği aynı önbelleğe okur/yazar ve bu yaklaşım birçok kullanıcıya ölçeklendirilen bir yaklaşımdır.
Tek örnekli bir web sunucusu için bellek ASP.NET Core kullanabilirsiniz. (Bu, geliştirme sırasında uygulamayı yerel olarak çalıştırmaya da iyi bir seçenektir.)
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";
});
}
SurveyApi yapılandırması appsettings.json içinde belirtilir.
"SurveyApi": {
"BaseUrl": "https://localhost:44301",
"Scopes": "https://test.onmicrosoft.com/surveys.webapi/surveys.access",
"Name": "SurveyApi"
},
Önbelleğe alınmış belirteçleri şifreleme
Belirteçler, kullanıcının kaynaklarına erişim izni verilen hassas verilerdir. (Ayrıca, bir kullanıcının parolasının aksine, yalnızca belirteci depolayasınız.) Bu nedenle, belirteçlerin tehlikeye atılmış durumdan korunması kritik öneme sahip.
Redis tarafından korunan önbellek bir parolayla korunur, ancak birisi parolayı elde ederse, önbelleğe alınan tüm erişim belirteçlerini elde eder. MSAL belirteci önbelleği şifrelenir.
Belirteci alın
Survey uygulaması, sayfa oluşturucudan aşağı akış web API'sini çağırır.
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}";
});
}
}
Bir diğer yol da ITokenAcquisition denetleyiciye bir hizmet eklemedir. Daha fazla bilgi için bkz. Microsoft Authentication Library (MSAL) kullanarak belirteçleri edinme ve önbelleğe ekleme
Sonraki adımlar
- MSAL.NET'de belirteç önbelleği serileştirme
- Microsoft Authentication Library (MSAL) kullanarak belirteçleri alın ve önbelleğe alın
Örnek kod