ISystemClock jest przestarzały
Microsoft.AspNetCore.Authentication.ISystemClock jest używany przez składniki uwierzytelniania i tożsamości ASP.NET Core od wersji 1.0, aby umożliwić testowanie jednostkowe funkcji związanych z czasem, takich jak sprawdzanie wygaśnięcia. Platforma .NET 8 zawiera odpowiednią abstrakcję , System.TimeProviderktóra udostępnia te same funkcje i wiele innych. Korzystamy z tej okazji do przestarzałej ISystemClock i zamieniamy ją TimeProvider na całe biblioteki ASP.NET Core.
Wprowadzona wersja
ASP.NET Core 8.0 (wersja zapoznawcza 5)
Poprzednie zachowanie
ISystemClock został wstrzyknięty do konstruktorów składników uwierzytelniania i tożsamości przez wstrzyknięcie zależności (DI) i może zostać zastąpiony do testowania.
Domyślna SystemClock implementacja obcinana do najbliższej sekundy w celu łatwiejszego formatowania.
Nowe zachowanie
ISystemClock, SystemClocki konstruktory programu obsługi uwierzytelniania, które mają ISystemClock parametr, zostały oznaczone jako przestarzałe. Użycie tych interfejsów API w kodzie spowoduje wygenerowanie ostrzeżenia w czasie kompilacji.
ISystemClock pozostaje w kontenerze wstrzykiwania zależności, ale nie jest już używany. Może zostać usunięty z kontenera w przyszłej wersji.
TimeProvider jest teraz właściwością settable w Options
klasach dla składników uwierzytelniania i tożsamości. Można go ustawić bezpośrednio lub rejestrując dostawcę w kontenerze wstrzykiwania zależności.
TimeProvider nie obcina się do najbliższej sekundy. Użytkownicy powinni poprawnie sformatować czas zgodnie z potrzebami.
Typ zmiany powodującej niezgodność
Ta zmiana ma wpływ na zgodność ze źródłem.
Przyczyna wprowadzenia zmiany
Ta zmiana została wprowadzona w celu ujednolicenia abstrakcji czasu w stosie w celu ułatwienia testowania.
Zalecana akcja
Jeśli masz składniki pochodzące z Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions> lub Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser>, usuń parametr konstruktora ISystemClock i odpowiednio wywołaj nowy konstruktor podstawowy.
- public BasicAuthenticationHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock)
- : base(options, logger, encoder, clock)
+ public BasicAuthenticationHandler(IOptionsMonitor<AuthenticationSchemeOptions> options, ILoggerFactory logger, UrlEncoder encoder)
+ : base(options, logger, encoder)
Podobnie pochodne implementacje odwołujące się do Clock
właściwości tych typów powinny odwoływać się do nowej TimeProvider
właściwości.
- var currentUtc = Clock.UtcNow;
+ var currentUtc = TimeProvider.GetUtcNow();
Na potrzeby testowania można ustawić TimeProvider
opcje lub za pośrednictwem di.
Dotyczy interfejsów API
- Microsoft.AspNetCore.Authentication.ISystemClock
- Microsoft.AspNetCore.Authentication.SystemClock
- Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions>
- Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions>.Clock
- CookieAuthenticationHandler(IOptionsMonitor<CookieAuthenticationOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- FacebookHandler(IOptionsMonitor<FacebookOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- GoogleHandler(IOptionsMonitor<GoogleOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- JwtBearerHandler(IOptionsMonitor<JwtBearerOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- MicrosoftAccountHandler(IOptionsMonitor<MicrosoftAccountOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- NegotiateHandler(IOptionsMonitor<NegotiateOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- OAuthHandler<TOptions>(IOptionsMonitor<TOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- OpenIdConnectHandler(IOptionsMonitor<OpenIdConnectOptions>, ILoggerFactory, HtmlEncoder, UrlEncoder, ISystemClock)
- Microsoft.AspNetCore.Authentication.PolicySchemeHandler.PolicySchemeHandler(IOptionsMonitor<PolicySchemeOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- Microsoft.AspNetCore.Authentication.RemoteAuthenticationHandler<TOptions>
- SignInAuthenticationHandler<TOptions>(IOptionsMonitor<TOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- SignOutAuthenticationHandler<TOptions>(IOptionsMonitor<TOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- TwitterHandler(IOptionsMonitor<TwitterOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- WsFederationHandler(IOptionsMonitor<WsFederationOptions>, ILoggerFactory, UrlEncoder, ISystemClock)
- SecurityStampValidator<TUser>(IOptions<SecurityStampValidatorOptions>, SignInManager<TUser>, ISystemClock, ILoggerFactory)
- Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser>.Clock
- TwoFactorSecurityStampValidator<TUser>(IOptions<SecurityStampValidatorOptions>, SignInManager<TUser>, ISystemClock, ILoggerFactory)