Skip to content

Commit e07cdd8

Browse files
authored
Add support for reading default scheme from config (#41987)
* Add support for reading default scheme from config * Address feedback and update API * Update API and fix functional test * Add null-check and regsiter ACO on AddAuth * Update tests and implementation
1 parent 47eb09b commit e07cdd8

23 files changed

+311
-130
lines changed

src/Azure/AzureAD/Authentication.AzureAD.UI/test/AzureADAuthenticationBuilderExtensionsTests.cs

+26-42
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ public class AzureADAuthenticationBuilderExtensionsTests
2020
public void AddAzureAD_AddsAllAuthenticationHandlers()
2121
{
2222
// Arrange
23-
var services = new ServiceCollection();
24-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
25-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
23+
var services = GenerateServicesForTest();
2624

2725
// Act
2826
services.AddAuthentication()
@@ -39,8 +37,7 @@ public void AddAzureAD_AddsAllAuthenticationHandlers()
3937
public void AddAzureAD_ConfiguresAllOptions()
4038
{
4139
// Arrange
42-
var services = new ServiceCollection();
43-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
40+
var services = GenerateServicesForTest();
4441

4542
// Act
4643
services.AddAuthentication()
@@ -89,8 +86,7 @@ public void AddAzureAD_ConfiguresAllOptions()
8986
public void AddAzureAD_AllowsOverridingCookiesAndOpenIdConnectSettings()
9087
{
9188
// Arrange
92-
var services = new ServiceCollection();
93-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
89+
var services = GenerateServicesForTest();
9490

9591
// Act
9692
services.AddAuthentication()
@@ -134,8 +130,7 @@ public void AddAzureAD_AllowsOverridingCookiesAndOpenIdConnectSettings()
134130
public void AddAzureAD_RegisteringAddCookiesAndAddOpenIdConnectHasNoImpactOnAzureAAExtensions()
135131
{
136132
// Arrange
137-
var services = new ServiceCollection();
138-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
133+
var services = GenerateServicesForTest();
139134

140135
// Act
141136
services.AddAuthentication()
@@ -181,8 +176,7 @@ public void AddAzureAD_RegisteringAddCookiesAndAddOpenIdConnectHasNoImpactOnAzur
181176
public void AddAzureAD_ThrowsForDuplicatedSchemes()
182177
{
183178
// Arrange
184-
var services = new ServiceCollection();
185-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
179+
var services = GenerateServicesForTest();
186180

187181
services.AddAuthentication()
188182
.AddAzureAD(o => { })
@@ -202,8 +196,7 @@ public void AddAzureAD_ThrowsForDuplicatedSchemes()
202196
public void AddAzureAD_ThrowsWhenOpenIdSchemeIsAlreadyInUse()
203197
{
204198
// Arrange
205-
var services = new ServiceCollection();
206-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
199+
var services = GenerateServicesForTest();
207200

208201
services.AddAuthentication()
209202
.AddAzureAD(o => { })
@@ -226,8 +219,7 @@ public void AddAzureAD_ThrowsWhenOpenIdSchemeIsAlreadyInUse()
226219
public void AddAzureAD_ThrowsWhenCookieSchemeIsAlreadyInUse()
227220
{
228221
// Arrange
229-
var services = new ServiceCollection();
230-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
222+
var services = GenerateServicesForTest();
231223

232224
services.AddAuthentication()
233225
.AddAzureAD(o => { })
@@ -250,8 +242,7 @@ public void AddAzureAD_ThrowsWhenCookieSchemeIsAlreadyInUse()
250242
public void AddAzureAD_ThrowsWhenInstanceIsNotSet()
251243
{
252244
// Arrange
253-
var services = new ServiceCollection();
254-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
245+
var services = GenerateServicesForTest();
255246

256247
services.AddAuthentication()
257248
.AddAzureAD(o => { });
@@ -271,8 +262,7 @@ public void AddAzureAD_ThrowsWhenInstanceIsNotSet()
271262
[Fact]
272263
public void AddAzureAD_SkipsOptionsValidationForNonAzureCookies()
273264
{
274-
var services = new ServiceCollection();
275-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
265+
var services = GenerateServicesForTest();
276266

277267
services.AddAuthentication()
278268
.AddAzureAD(o => { })
@@ -288,9 +278,7 @@ public void AddAzureAD_SkipsOptionsValidationForNonAzureCookies()
288278
public void AddAzureADBearer_AddsAllAuthenticationHandlers()
289279
{
290280
// Arrange
291-
var services = new ServiceCollection();
292-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
293-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
281+
var services = GenerateServicesForTest();
294282

295283
// Act
296284
services.AddAuthentication()
@@ -306,9 +294,7 @@ public void AddAzureADBearer_AddsAllAuthenticationHandlers()
306294
public void AddAzureADBearer_ConfiguresAllOptions()
307295
{
308296
// Arrange
309-
var services = new ServiceCollection();
310-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
311-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
297+
var services = GenerateServicesForTest();
312298

313299
// Act
314300
services.AddAuthentication()
@@ -342,9 +328,7 @@ public void AddAzureADBearer_ConfiguresAllOptions()
342328
public void AddAzureADBearer_CanOverrideJwtBearerOptionsConfiguration()
343329
{
344330
// Arrange
345-
var services = new ServiceCollection();
346-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
347-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
331+
var services = GenerateServicesForTest();
348332

349333
// Act
350334
services.AddAuthentication()
@@ -376,9 +360,7 @@ public void AddAzureADBearer_CanOverrideJwtBearerOptionsConfiguration()
376360
public void AddAzureADBearer_RegisteringJwtBearerHasNoImpactOnAzureAAExtensions()
377361
{
378362
// Arrange
379-
var services = new ServiceCollection();
380-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
381-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
363+
var services = GenerateServicesForTest();
382364

383365
// Act
384366
services.AddAuthentication()
@@ -411,8 +393,7 @@ public void AddAzureADBearer_RegisteringJwtBearerHasNoImpactOnAzureAAExtensions(
411393
public void AddAzureADBearer_ThrowsForDuplicatedSchemes()
412394
{
413395
// Arrange
414-
var services = new ServiceCollection();
415-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
396+
var services = GenerateServicesForTest();
416397

417398
services.AddAuthentication()
418399
.AddAzureADBearer(o => { })
@@ -432,8 +413,7 @@ public void AddAzureADBearer_ThrowsForDuplicatedSchemes()
432413
public void AddAzureADBearer_ThrowsWhenBearerSchemeIsAlreadyInUse()
433414
{
434415
// Arrange
435-
var services = new ServiceCollection();
436-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
416+
var services = GenerateServicesForTest();
437417

438418
services.AddAuthentication()
439419
.AddAzureADBearer(o => { })
@@ -456,8 +436,7 @@ public void AddAzureADBearer_ThrowsWhenBearerSchemeIsAlreadyInUse()
456436
public void AddAzureADBearer_ThrowsWhenInstanceIsNotSet()
457437
{
458438
// Arrange
459-
var services = new ServiceCollection();
460-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
439+
var services = GenerateServicesForTest();
461440

462441
services.AddAuthentication()
463442
.AddAzureADBearer(o => { });
@@ -477,9 +456,7 @@ public void AddAzureADBearer_ThrowsWhenInstanceIsNotSet()
477456
[Fact]
478457
public void AddAzureADBearer_SkipsOptionsValidationForNonAzureCookies()
479458
{
480-
var services = new ServiceCollection();
481-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
482-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
459+
var services = GenerateServicesForTest();
483460

484461
services.AddAuthentication()
485462
.AddAzureADBearer(o => { })
@@ -494,8 +471,7 @@ public void AddAzureADBearer_SkipsOptionsValidationForNonAzureCookies()
494471
[Fact]
495472
public void AddAzureAD_SkipsOptionsValidationForNonAzureOpenIdConnect()
496473
{
497-
var services = new ServiceCollection();
498-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
474+
var services = GenerateServicesForTest();
499475

500476
services.AddAuthentication()
501477
.AddAzureAD(o => { })
@@ -510,4 +486,12 @@ public void AddAzureAD_SkipsOptionsValidationForNonAzureOpenIdConnect()
510486

511487
Assert.NotNull(openIdConnectOptions.Get("other"));
512488
}
489+
490+
private IServiceCollection GenerateServicesForTest()
491+
{
492+
var services = new ServiceCollection();
493+
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
494+
services.AddSingleton<IConfiguration>(new ConfigurationManager());
495+
return services;
496+
}
513497
}

src/Azure/AzureAD/Authentication.AzureADB2C.UI/test/AzureAdB2CAuthenticationBuilderExtensionsTests.cs

+21-30
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ public class AzureADB2CAuthenticationBuilderExtensionsTests
2020
public void AddAzureADB2C_AddsAllAuthenticationHandlers()
2121
{
2222
// Arrange
23-
var services = new ServiceCollection();
24-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
23+
var services = GenerateServicesForTest();
2524

2625
// Act
2726
services.AddAuthentication()
@@ -38,8 +37,7 @@ public void AddAzureADB2C_AddsAllAuthenticationHandlers()
3837
public void AddAzureADB2C_ConfiguresAllOptions()
3938
{
4039
// Arrange
41-
var services = new ServiceCollection();
42-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
40+
var services = GenerateServicesForTest();
4341

4442
// Act
4543
services.AddAuthentication()
@@ -102,8 +100,7 @@ public void AddAzureADB2C_ConfiguresAllOptions()
102100
public void AddAzureADB2C_AllowsOverridingCookiesAndOpenIdConnectSettings()
103101
{
104102
// Arrange
105-
var services = new ServiceCollection();
106-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
103+
var services = GenerateServicesForTest();
107104

108105
// Act
109106
services.AddAuthentication()
@@ -146,8 +143,7 @@ public void AddAzureADB2C_AllowsOverridingCookiesAndOpenIdConnectSettings()
146143
public void AddAzureADB2C_RegisteringAddCookiesAndAddOpenIdConnectHasNoImpactOnAzureAAExtensions()
147144
{
148145
// Arrange
149-
var services = new ServiceCollection();
150-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
146+
var services = GenerateServicesForTest();
151147

152148
// Act
153149
services.AddAuthentication()
@@ -192,8 +188,7 @@ public void AddAzureADB2C_RegisteringAddCookiesAndAddOpenIdConnectHasNoImpactOnA
192188
public void AddAzureADB2C_ThrowsForDuplicatedSchemes()
193189
{
194190
// Arrange
195-
var services = new ServiceCollection();
196-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
191+
var services = GenerateServicesForTest();
197192

198193
services.AddAuthentication()
199194
.AddAzureADB2C(o => { })
@@ -213,8 +208,7 @@ public void AddAzureADB2C_ThrowsForDuplicatedSchemes()
213208
public void AddAzureADB2C_ThrowsWhenOpenIdSchemeIsAlreadyInUse()
214209
{
215210
// Arrange
216-
var services = new ServiceCollection();
217-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
211+
var services = GenerateServicesForTest();
218212

219213
services.AddAuthentication()
220214
.AddAzureADB2C(o => { })
@@ -237,8 +231,7 @@ public void AddAzureADB2C_ThrowsWhenOpenIdSchemeIsAlreadyInUse()
237231
public void AddAzureADB2C_ThrowsWhenCookieSchemeIsAlreadyInUse()
238232
{
239233
// Arrange
240-
var services = new ServiceCollection();
241-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
234+
var services = GenerateServicesForTest();
242235

243236
services.AddAuthentication()
244237
.AddAzureADB2C(o => { })
@@ -261,9 +254,7 @@ public void AddAzureADB2C_ThrowsWhenCookieSchemeIsAlreadyInUse()
261254
public void AddAzureADB2CBearer_AddsAllAuthenticationHandlers()
262255
{
263256
// Arrange
264-
var services = new ServiceCollection();
265-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
266-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
257+
var services = GenerateServicesForTest();
267258

268259
// Act
269260
services.AddAuthentication()
@@ -279,9 +270,7 @@ public void AddAzureADB2CBearer_AddsAllAuthenticationHandlers()
279270
public void AddAzureADB2CBearer_ConfiguresAllOptions()
280271
{
281272
// Arrange
282-
var services = new ServiceCollection();
283-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
284-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
273+
var services = GenerateServicesForTest();
285274

286275
// Act
287276
services.AddAuthentication()
@@ -316,9 +305,7 @@ public void AddAzureADB2CBearer_ConfiguresAllOptions()
316305
public void AddAzureADB2CBearer_CanOverrideJwtBearerOptionsConfiguration()
317306
{
318307
// Arrange
319-
var services = new ServiceCollection();
320-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
321-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
308+
var services = GenerateServicesForTest();
322309

323310
// Act
324311
services.AddAuthentication()
@@ -350,9 +337,7 @@ public void AddAzureADB2CBearer_CanOverrideJwtBearerOptionsConfiguration()
350337
public void AddAzureADB2CBearer_RegisteringJwtBearerHasNoImpactOnAzureAAExtensions()
351338
{
352339
// Arrange
353-
var services = new ServiceCollection();
354-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
355-
services.AddSingleton<IConfiguration>(new ConfigurationManager());
340+
var services = GenerateServicesForTest();
356341

357342
// Act
358343
services.AddAuthentication()
@@ -385,8 +370,7 @@ public void AddAzureADB2CBearer_RegisteringJwtBearerHasNoImpactOnAzureAAExtensio
385370
public void AddAzureADB2CBearer_ThrowsForDuplicatedSchemes()
386371
{
387372
// Arrange
388-
var services = new ServiceCollection();
389-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
373+
var services = GenerateServicesForTest();
390374

391375
services.AddAuthentication()
392376
.AddAzureADB2CBearer(o => { })
@@ -406,8 +390,7 @@ public void AddAzureADB2CBearer_ThrowsForDuplicatedSchemes()
406390
public void AddAzureADB2CBearer_ThrowsWhenBearerSchemeIsAlreadyInUse()
407391
{
408392
// Arrange
409-
var services = new ServiceCollection();
410-
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
393+
var services = GenerateServicesForTest();
411394

412395
services.AddAuthentication()
413396
.AddAzureADB2CBearer(o => { })
@@ -425,4 +408,12 @@ public void AddAzureADB2CBearer_ThrowsWhenBearerSchemeIsAlreadyInUse()
425408

426409
Assert.Equal(expectedMessage, exception.Message);
427410
}
411+
412+
private IServiceCollection GenerateServicesForTest()
413+
{
414+
var services = new ServiceCollection();
415+
services.AddSingleton<ILoggerFactory>(new NullLoggerFactory());
416+
services.AddSingleton<IConfiguration>(new ConfigurationManager());
417+
return services;
418+
}
428419
}

src/DefaultBuilder/src/WebApplicationAuthenticationBuilder.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -14,34 +14,34 @@ public WebApplicationAuthenticationBuilder(IServiceCollection services) : base(s
1414

1515
public override AuthenticationBuilder AddPolicyScheme(string authenticationScheme, string? displayName, Action<PolicySchemeOptions> configureOptions)
1616
{
17-
RegisterServices(authenticationScheme);
17+
RegisterServices();
1818
return base.AddPolicyScheme(authenticationScheme, displayName, configureOptions);
1919
}
2020

2121
public override AuthenticationBuilder AddRemoteScheme<TOptions, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THandler>(string authenticationScheme, string? displayName, Action<TOptions>? configureOptions)
2222
{
23-
RegisterServices(authenticationScheme);
23+
RegisterServices();
2424
return base.AddRemoteScheme<TOptions, THandler>(authenticationScheme, displayName, configureOptions);
2525
}
2626

2727
public override AuthenticationBuilder AddScheme<TOptions, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THandler>(string authenticationScheme, string? displayName, Action<TOptions>? configureOptions)
2828
{
29-
RegisterServices(authenticationScheme);
29+
RegisterServices();
3030
return base.AddScheme<TOptions, THandler>(authenticationScheme, displayName, configureOptions);
3131
}
3232

3333
public override AuthenticationBuilder AddScheme<TOptions, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] THandler>(string authenticationScheme, Action<TOptions>? configureOptions)
3434
{
35-
RegisterServices(authenticationScheme);
35+
RegisterServices();
3636
return base.AddScheme<TOptions, THandler>(authenticationScheme, configureOptions);
3737
}
3838

39-
private void RegisterServices(string authenticationScheme)
39+
private void RegisterServices()
4040
{
4141
if (!IsAuthenticationConfigured)
4242
{
4343
IsAuthenticationConfigured = true;
44-
Services.AddAuthentication(authenticationScheme);
44+
Services.AddAuthentication();
4545
Services.AddAuthorization();
4646
}
4747
}

0 commit comments

Comments
 (0)