У меня есть веб-приложение ASP.NET Core MVC, которое является клиентом OpenID Connect.Он использует библиотеку Microsoft.AspNetCore.Authentication.OpenIdConnect
, настроенную в моем Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication( o =>
{
o.DefaultScheme = "Cookies";
o.DefaultChallengeScheme = "oidc";
} )
.AddCookie( authenticationScheme: "Cookies", o => {
o.Cookie.SameSite = SameSiteMode.None; // https://stackoverflow.com/questions/51982626/cookies-with-a-samesite-policy-enforced-are-blocked-in-ios-12-for-sso-flows-invo
o.Cookie.Expiration = new TimeSpan( days: 365, hours: 0, minutes: 0, seconds: 0 );
} )
.AddOpenIdConnect( authenticationScheme: "oidc", o =>
{
o.SignInScheme = "Cookies";
o.Authority = "https://myauthority/";
o.ClientId = "my-mvc-application";
o.ClientSecret = "secret";
o.Scope.Clear();
o.Scope.Add( "openid" );
o.Scope.Add( "offline_access" );
o.Scope.Add( "api1" );
o.Scope.Add( "my-id-claims" );
o.ResponseType = "code id_token";
o.SaveTokens = true;
o.GetClaimsFromUserInfoEndpoint = true;
o.RequireHttpsMetadata = !this.isDevelopment;
} );
}
Я хочу выполнить следующее:
- В моем приложении много претензий в
id_token
Идентификационный токен.Это приводит к тому, что размер файла cookie проверки подлинности файлов cookie ASP.NET превышает ограничение в 4096 байт.Я хочу хранить только этот токен в каком-то хранилище в памяти. - Я понимаю, что
id_token
не требуется для какой-либо аутентификации, поэтому, если у пользователя id_token
выпадает память (например, перезапускается процесс ASP.NET или истекает срок действия кэша в памяти)тогда веб-приложение ASP.NET может повторно запросить id_token
за кулисами, используя access_token
.
- Но я хочу
refresh_token
и access_token
продолжать храниться в файлах cookie пользователя, чтобы веб-приложение ASP.NET всегда имело к ним доступ. - Если они хранятся в резервном хранилище (например,
ITicketStore
), то, если хранилище билетов недоступно или отбрасывает свои сохраненные объекты, тогда пользователь не может пройти проверку подлинности с помощью своего билета, и они должны повторно пройти проверку подлинности.
Я смотрел на использование ITicketStore
, однако это всегда заставляет ASP.NET использовать резервное хранилище для всех токенов, а не только refresh_token
и access_token
.
Я отмечаю, что Microsoft.AspNetCore.Authentication.OpenIdConnect
устанавливает значения AuthenticationToken
- если подкласс Microsoft.AspNetCore.Authentication.OpenIdConnect
отвечает за хранение различных токенов в разных местах или если это происходит в другом месте вСистема токенов / билетов аутентификации в ASP.NET Core?