11using Microsoft . AspNetCore . Authentication ;
22using Microsoft . Extensions . DependencyInjection ;
3+ using Microsoft . Extensions . DependencyInjection . Extensions ;
34
45namespace AspNetCore . SecurityKey ;
56
@@ -27,7 +28,9 @@ public static AuthenticationBuilder AddSecurityKey(this AuthenticationBuilder bu
2728 /// <returns>
2829 /// The <see cref="AuthenticationBuilder"/> instance for chaining further authentication configuration.
2930 /// </returns>
30- public static AuthenticationBuilder AddSecurityKey ( this AuthenticationBuilder builder , string authenticationScheme )
31+ public static AuthenticationBuilder AddSecurityKey (
32+ this AuthenticationBuilder builder ,
33+ string authenticationScheme )
3134 => builder . AddSecurityKey ( authenticationScheme : authenticationScheme , displayName : null , configureOptions : null ) ;
3235
3336 /// <summary>
@@ -39,7 +42,9 @@ public static AuthenticationBuilder AddSecurityKey(this AuthenticationBuilder bu
3942 /// <returns>
4043 /// The <see cref="AuthenticationBuilder"/> instance for chaining further authentication configuration.
4144 /// </returns>
42- public static AuthenticationBuilder AddSecurityKey ( this AuthenticationBuilder builder , Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
45+ public static AuthenticationBuilder AddSecurityKey (
46+ this AuthenticationBuilder builder ,
47+ Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
4348 => builder . AddSecurityKey ( authenticationScheme : SecurityKeyAuthenticationDefaults . AuthenticationScheme , displayName : null , configureOptions : configureOptions ) ;
4449
4550 /// <summary>
@@ -51,7 +56,10 @@ public static AuthenticationBuilder AddSecurityKey(this AuthenticationBuilder bu
5156 /// <returns>
5257 /// The <see cref="AuthenticationBuilder"/> instance for chaining further authentication configuration.
5358 /// </returns>
54- public static AuthenticationBuilder AddSecurityKey ( this AuthenticationBuilder builder , string authenticationScheme , Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
59+ public static AuthenticationBuilder AddSecurityKey (
60+ this AuthenticationBuilder builder ,
61+ string authenticationScheme ,
62+ Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
5563 => builder . AddSecurityKey ( authenticationScheme : authenticationScheme , displayName : null , configureOptions : configureOptions ) ;
5664
5765 /// <summary>
@@ -67,7 +75,11 @@ public static AuthenticationBuilder AddSecurityKey(this AuthenticationBuilder bu
6775 /// <exception cref="ArgumentNullException">
6876 /// Thrown when <paramref name="builder"/> is <c>null</c>.
6977 /// </exception>
70- public static AuthenticationBuilder AddSecurityKey ( this AuthenticationBuilder builder , string authenticationScheme , string ? displayName , Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
78+ public static AuthenticationBuilder AddSecurityKey (
79+ this AuthenticationBuilder builder ,
80+ string authenticationScheme ,
81+ string ? displayName ,
82+ Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
7183 => builder . AddSecurityKey < SecurityKeyValidator , SecurityKeyExtractor > ( authenticationScheme , displayName , configureOptions ) ;
7284
7385 /// <summary>
@@ -91,7 +103,9 @@ public static AuthenticationBuilder AddSecurityKey<TValidator>(this Authenticati
91103 /// <returns>
92104 /// The <see cref="AuthenticationBuilder"/> instance for chaining further authentication configuration.
93105 /// </returns>
94- public static AuthenticationBuilder AddSecurityKey < TValidator > ( this AuthenticationBuilder builder , string authenticationScheme )
106+ public static AuthenticationBuilder AddSecurityKey < TValidator > (
107+ this AuthenticationBuilder builder ,
108+ string authenticationScheme )
95109 where TValidator : class , ISecurityKeyValidator
96110 => builder . AddSecurityKey < TValidator , SecurityKeyExtractor > ( authenticationScheme : authenticationScheme , displayName : null , configureOptions : null ) ;
97111
@@ -104,7 +118,9 @@ public static AuthenticationBuilder AddSecurityKey<TValidator>(this Authenticati
104118 /// <returns>
105119 /// The <see cref="AuthenticationBuilder"/> instance for chaining further authentication configuration.
106120 /// </returns>
107- public static AuthenticationBuilder AddSecurityKey < TValidator > ( this AuthenticationBuilder builder , Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
121+ public static AuthenticationBuilder AddSecurityKey < TValidator > (
122+ this AuthenticationBuilder builder ,
123+ Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
108124 where TValidator : class , ISecurityKeyValidator
109125 => builder . AddSecurityKey < TValidator , SecurityKeyExtractor > ( authenticationScheme : SecurityKeyAuthenticationDefaults . AuthenticationScheme , displayName : null , configureOptions : configureOptions ) ;
110126
@@ -132,7 +148,9 @@ public static AuthenticationBuilder AddSecurityKey<TValidator, TExtractor>(this
132148 /// <returns>
133149 /// The <see cref="AuthenticationBuilder"/> instance for chaining further authentication configuration.
134150 /// </returns>
135- public static AuthenticationBuilder AddSecurityKey < TValidator , TExtractor > ( this AuthenticationBuilder builder , string authenticationScheme )
151+ public static AuthenticationBuilder AddSecurityKey < TValidator , TExtractor > (
152+ this AuthenticationBuilder builder ,
153+ string authenticationScheme )
136154 where TValidator : class , ISecurityKeyValidator
137155 where TExtractor : class , ISecurityKeyExtractor
138156 => builder . AddSecurityKey < TValidator , TExtractor > ( authenticationScheme : authenticationScheme , displayName : null , configureOptions : null ) ;
@@ -147,7 +165,9 @@ public static AuthenticationBuilder AddSecurityKey<TValidator, TExtractor>(this
147165 /// <returns>
148166 /// The <see cref="AuthenticationBuilder"/> instance for chaining further authentication configuration.
149167 /// </returns>
150- public static AuthenticationBuilder AddSecurityKey < TValidator , TExtractor > ( this AuthenticationBuilder builder , Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
168+ public static AuthenticationBuilder AddSecurityKey < TValidator , TExtractor > (
169+ this AuthenticationBuilder builder ,
170+ Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
151171 where TValidator : class , ISecurityKeyValidator
152172 where TExtractor : class , ISecurityKeyExtractor
153173 => builder . AddSecurityKey < TValidator , TExtractor > ( authenticationScheme : SecurityKeyAuthenticationDefaults . AuthenticationScheme , displayName : null , configureOptions : configureOptions ) ;
@@ -167,15 +187,29 @@ public static AuthenticationBuilder AddSecurityKey<TValidator, TExtractor>(this
167187 /// <exception cref="ArgumentNullException">
168188 /// Thrown when <paramref name="builder"/> is <c>null</c>.
169189 /// </exception>
170- public static AuthenticationBuilder AddSecurityKey < TValidator , TExtractor > ( this AuthenticationBuilder builder , string authenticationScheme , string ? displayName , Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
190+ public static AuthenticationBuilder AddSecurityKey < TValidator , TExtractor > (
191+ this AuthenticationBuilder builder ,
192+ string authenticationScheme ,
193+ string ? displayName ,
194+ Action < SecurityKeyAuthenticationSchemeOptions > ? configureOptions )
171195 where TValidator : class , ISecurityKeyValidator
172196 where TExtractor : class , ISecurityKeyExtractor
173197 {
174198 ArgumentNullException . ThrowIfNull ( builder ) ;
175199
176- builder . Services . AddOptions < SecurityKeyAuthenticationSchemeOptions > ( authenticationScheme ) ;
200+ // Register default services
177201 builder . Services . AddSecurityKey < TValidator , TExtractor > ( ) ;
178202
203+ // Add the authentication scheme options to the service collection to ensure they are available for post-configuration
204+ builder . Services . AddOptions < SecurityKeyAuthenticationSchemeOptions > ( authenticationScheme ) ;
205+
206+ // Register the keyed provider services for the specified authentication scheme
207+ builder . Services . TryAddKeyedScoped < ISecurityKeyValidator , TValidator > ( authenticationScheme ) ;
208+ builder . Services . TryAddKeyedScoped < ISecurityKeyExtractor , TExtractor > ( authenticationScheme ) ;
209+
210+ // Post-configure the authentication scheme options to set the ProviderServiceKey after the keyed provider is registered
211+ builder . Services . PostConfigure < SecurityKeyAuthenticationSchemeOptions > ( authenticationScheme , options => options . ProviderServiceKey = authenticationScheme ) ;
212+
179213 return builder . AddScheme < SecurityKeyAuthenticationSchemeOptions , SecurityKeyAuthenticationHandler > ( authenticationScheme , displayName , configureOptions ) ;
180214 }
181215}
0 commit comments