ISystemClock está obsoleto
Microsoft.AspNetCore.Authentication.ISystemClock tem sido usado pelos componentes de autenticação e identidade do ASP.NET Core desde a versão 1.0 para permitir o teste de unidade de funcionalidade relacionada ao tempo, como verificação de expiração. O .NET 8 inclui uma abstração adequada, System.TimeProviderque fornece a mesma funcionalidade e muito mais. Estamos aproveitando esta oportunidade para obsoletos ISystemClock e substituí-lo por TimeProvider todas as bibliotecas ASP.NET Core.
Versão introduzida
ASP.NET Core 8.0 Preview 5
Comportamento anterior
ISystemClock foi injetado nos construtores dos componentes de autenticação e identidade por injeção de dependência (DI) e pode ser substituído para teste.
A implementação padrão SystemClock truncada para o segundo mais próximo para facilitar a formatação.
Novo comportamento
ISystemClock, SystemClocke os construtores do manipulador de autenticação que têm um ISystemClock parâmetro foram marcados como obsoletos. O uso dessas APIs no código gerará um aviso em tempo de compilação.
ISystemClock permanece no recipiente de injeção de dependência, mas não é mais usado. Ele pode ser removido do contêiner em uma versão futura.
TimeProvider agora é uma propriedade configurável nas Options
classes para os componentes de autenticação e identidade. Ele pode ser definido diretamente ou registrando um provedor no contêiner de injeção de dependência.
TimeProvider não truncar para o segundo mais próximo. Espera-se que os consumidores formatem corretamente o tempo conforme necessário.
Tipo de mudança de rutura
Essa alteração afeta a compatibilidade da fonte.
Razão para a alteração
Essa alteração foi feita para unificar a abstração de tempo em toda a pilha para facilitar os testes.
Ação recomendada
Se você tiver componentes derivados de Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions> ou Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser>, remova o parâmetro do ISystemClock construtor e chame o novo construtor base de acordo.
- 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)
Da mesma forma, implementações derivadas que fazem referência à Clock
propriedade nesses tipos devem fazer referência à nova TimeProvider
propriedade.
- var currentUtc = Clock.UtcNow;
+ var currentUtc = TimeProvider.GetUtcNow();
Você pode definir TimeProvider
para teste nas opções ou via DI.
APIs afetadas
- 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)