Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Microsoft.AspNetCore.Authentication.ISystemClock a été utilisé par les composants d'authentification et d'identité d'ASP.NET Core depuis la version 1.0 pour permettre le test unitaire des fonctionnalités liées au temps, comme la vérification de l'expiration. .NET 8 inclut une abstraction appropriée, System.TimeProviderqui fournit les mêmes fonctionnalités et bien plus encore. Nous profitons de cette occasion pour d’obsolétiser ISystemClock et la remplacer par TimeProvider dans toutes les bibliothèques ASP.NET Core.
Version introduite
ASP.NET Core 8.0 Preview 5
Comportement précédent
ISystemClock a été injecté dans les constructeurs des composants d’authentification et d’identité par injection de dépendance (DI) et pouvait être substitué pour les tests.
Implémentation par défaut SystemClock tronquée à la seconde la plus proche pour faciliter la mise en forme.
Nouveau comportement
ISystemClock, SystemClock, et les constructeurs de gestionnaires d'authentification qui ont un paramètre ISystemClock ont été marqués comme obsolètes. L’utilisation de ces API dans le code génère un avertissement au moment de la compilation.
ISystemClock reste dans le conteneur d’injection de dépendances, mais n’est plus utilisé. Il peut être supprimé du conteneur dans une version ultérieure.
TimeProvider est maintenant une propriété modifiable dans les classes des composants d’authentification et d’identité. Il peut être défini directement ou en inscrivant un fournisseur dans le conteneur d’injection de dépendances.
TimeProvider ne tronque pas à la seconde la plus proche. Les consommateurs sont censés formater correctement l’heure selon les besoins.
Type de changement cassant
Cette modification affecte la compatibilité de la source.
Raison de la modification
Cette modification a été apportée pour unifier l’abstraction du temps dans la pile pour simplifier les tests.
Action recommandée
Si vous avez des composants qui dérivent de Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions> ou de Microsoft.AspNetCore.Identity.SecurityStampValidator<TUser>, supprimez le paramètre du constructeur ISystemClock et appelez le nouveau constructeur de base en conséquence.
- 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)
De même, les implémentations dérivées qui référencent la Clock propriété sur ces types doivent faire référence à la nouvelle TimeProvider propriété à la place.
- var currentUtc = Clock.UtcNow;
+ var currentUtc = TimeProvider.GetUtcNow();
Vous pouvez définir TimeProvider pour les tests dans les options ou via DI.
API affectées
- 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)