Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Microsoft.AspNetCore.Authentication.ISystemClock tem sido usado por componentes de autenticação e identidade do ASP.NET Core desde a versão 1.0 para habilitar o teste de unidade da funcionalidade relacionada ao tempo, como a verificação de expiração. O .NET 8 inclui uma abstração adequada, System.TimeProviderque fornece a mesma funcionalidade e muito mais. Estamos aproveitando essa oportunidade para tornar obsoleto ISystemClock e substituí-lo em todas as bibliotecas TimeProvider do ASP.NET Core.
Versão introduzida
ASP.NET Core 8.0 Versão Prévia 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 durante testes.
A implementação padrão SystemClock é truncada ao segundo mais próximo para formatação facilitada.
Novo comportamento
ISystemClock, SystemClocke os construtores do manipulador de autenticação que têm um ISystemClock parâmetro foram marcados como obsoletos. Usar essas APIs no código gerará um aviso em tempo de compilação.
ISystemClock permanece no contêiner 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 trunca para o segundo mais próximo. Espera-se que os consumidores formatem corretamente o tempo conforme necessário.
Tipo de mudança disruptiva
Essa alteração afeta a compatibilidade de origem.
Motivo da 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 que derivam 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 adequadamente.
- 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 à propriedade Clock nesses tipos devem referenciar a nova propriedade TimeProvider.
- 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)