Skip to content

Commit 96134fc

Browse files
authored
Add missing TimeProvider registration (#53946)
1 parent 48dd6a9 commit 96134fc

File tree

3 files changed

+47
-4
lines changed

3 files changed

+47
-4
lines changed

src/Identity/Core/src/IdentityBuilderExtensions.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,12 +106,14 @@ public static IdentityBuilder AddApiEndpoints(this IdentityBuilder builder)
106106
// Set TimeProvider from DI on all options instances, if not already set by tests.
107107
private sealed class PostConfigureSecurityStampValidatorOptions : IPostConfigureOptions<SecurityStampValidatorOptions>
108108
{
109-
public PostConfigureSecurityStampValidatorOptions(TimeProvider timeProvider)
109+
public PostConfigureSecurityStampValidatorOptions(TimeProvider? timeProvider = null)
110110
{
111+
// We could assign this to "timeProvider ?? TimeProvider.System", but
112+
// SecurityStampValidator already has system clock fallback logic.
111113
TimeProvider = timeProvider;
112114
}
113115

114-
private TimeProvider TimeProvider { get; }
116+
private TimeProvider? TimeProvider { get; }
115117

116118
public void PostConfigure(string? name, SecurityStampValidatorOptions options)
117119
{

src/Identity/Core/src/IdentityServiceCollectionExtensions.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,12 +171,14 @@ public static IServiceCollection ConfigureExternalCookie(this IServiceCollection
171171

172172
private sealed class PostConfigureSecurityStampValidatorOptions : IPostConfigureOptions<SecurityStampValidatorOptions>
173173
{
174-
public PostConfigureSecurityStampValidatorOptions(TimeProvider timeProvider)
174+
public PostConfigureSecurityStampValidatorOptions(TimeProvider? timeProvider = null)
175175
{
176+
// We could assign this to "timeProvider ?? TimeProvider.System", but
177+
// SecurityStampValidator already has system clock fallback logic.
176178
TimeProvider = timeProvider;
177179
}
178180

179-
private TimeProvider TimeProvider { get; }
181+
private TimeProvider? TimeProvider { get; }
180182

181183
public void PostConfigure(string? name, SecurityStampValidatorOptions options)
182184
{

src/Identity/test/Identity.Test/IdentityBuilderTest.cs

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,45 @@ public void EnsureDefaultServices()
196196
Assert.IsType<UserManager<PocoUser>>(provider.GetRequiredService<UserManager<PocoUser>>());
197197
}
198198

199+
[Fact]
200+
public void EnsureDefaultSignInManagerDependenciesForIdentity()
201+
{
202+
var services = new ServiceCollection()
203+
.AddSingleton<IConfiguration>(new ConfigurationBuilder().Build());
204+
services.AddLogging()
205+
.AddIdentity<PocoUser, PocoRole>()
206+
.AddUserStore<NoopUserStore>()
207+
.AddRoleStore<NoopRoleStore>()
208+
.AddSignInManager<MySignInManager>();
209+
210+
var provider = services.BuildServiceProvider();
211+
212+
Assert.IsType<MySignInManager>(provider.GetRequiredService<SignInManager<PocoUser>>());
213+
Assert.IsType<SecurityStampValidator<PocoUser>>(provider.GetRequiredService<ISecurityStampValidator>());
214+
Assert.IsType<TwoFactorSecurityStampValidator<PocoUser>>(provider.GetRequiredService<ITwoFactorSecurityStampValidator>());
215+
Assert.NotNull(provider.GetService<IOptions<SecurityStampValidatorOptions>>());
216+
}
217+
218+
[Fact]
219+
public void EnsureDefaultSignInManagerDependenciesForIdentityCore()
220+
{
221+
var services = new ServiceCollection()
222+
.AddSingleton<IConfiguration>(new ConfigurationBuilder().Build());
223+
services.AddLogging()
224+
.AddIdentityCore<PocoUser>()
225+
.AddRoles<PocoRole>()
226+
.AddUserStore<NoopUserStore>()
227+
.AddRoleStore<NoopRoleStore>()
228+
.AddSignInManager<MySignInManager>();
229+
230+
var provider = services.BuildServiceProvider();
231+
232+
Assert.IsType<MySignInManager>(provider.GetRequiredService<SignInManager<PocoUser>>());
233+
Assert.IsType<SecurityStampValidator<PocoUser>>(provider.GetRequiredService<ISecurityStampValidator>());
234+
Assert.IsType<TwoFactorSecurityStampValidator<PocoUser>>(provider.GetRequiredService<ITwoFactorSecurityStampValidator>());
235+
Assert.NotNull(provider.GetService<IOptions<SecurityStampValidatorOptions>>());
236+
}
237+
199238
[Fact]
200239
public void EnsureDefaultTokenProviders()
201240
{

0 commit comments

Comments
 (0)