@@ -216,9 +216,9 @@ public static IHttpClientBuilder AddClientAccessTokenHttpClient(this IServiceCol
216216 /// <returns></returns>
217217 public static IHttpClientBuilder AddUserAccessTokenHandler (
218218 this IHttpClientBuilder httpClientBuilder ,
219- UserTokenRequestParameters ? parameters = null ) => AddUserAccessTokenHandler (
219+ UserTokenRequestParameters ? parameters = null ) => AddUserAccessTokenHandlerInternal (
220220 httpClientBuilder ,
221- tokenRequestCustomizer : null ,
221+ tokenRequestCustomizerFactory : null ,
222222 parameters ) ;
223223
224224 /// <summary>
@@ -230,12 +230,35 @@ public static IHttpClientBuilder AddUserAccessTokenHandler(
230230 /// <returns></returns>
231231 public static IHttpClientBuilder AddUserAccessTokenHandler (
232232 this IHttpClientBuilder httpClientBuilder ,
233- ITokenRequestCustomizer ? tokenRequestCustomizer ,
233+ ITokenRequestCustomizer tokenRequestCustomizer ,
234234 UserTokenRequestParameters ? parameters = null ) =>
235+ AddUserAccessTokenHandlerInternal ( httpClientBuilder , _ => tokenRequestCustomizer , parameters ) ;
236+
237+ /// <summary>
238+ /// Adds the user access token handler to an HttpClient
239+ /// </summary>
240+ /// <param name="httpClientBuilder"></param>
241+ /// <param name="tokenRequestCustomizerFactory"></param>
242+ /// <param name="parameters"></param>
243+ /// <returns></returns>
244+ public static IHttpClientBuilder AddUserAccessTokenHandler (
245+ this IHttpClientBuilder httpClientBuilder ,
246+ Func < IServiceProvider , ITokenRequestCustomizer > tokenRequestCustomizerFactory ,
247+ UserTokenRequestParameters ? parameters = null )
248+ {
249+ ArgumentNullException . ThrowIfNull ( tokenRequestCustomizerFactory ) ;
250+ return AddUserAccessTokenHandlerInternal ( httpClientBuilder , tokenRequestCustomizerFactory , parameters ) ;
251+ }
252+
253+ private static IHttpClientBuilder AddUserAccessTokenHandlerInternal (
254+ IHttpClientBuilder httpClientBuilder ,
255+ Func < IServiceProvider , ITokenRequestCustomizer > ? tokenRequestCustomizerFactory ,
256+ UserTokenRequestParameters ? parameters ) =>
235257 httpClientBuilder . AddHttpMessageHandler ( provider =>
236258 {
237259 var httpContextAccessor = provider . GetRequiredService < IUserAccessor > ( ) ;
238260 var userTokenManagementService = provider . GetRequiredService < IUserTokenManager > ( ) ;
261+ var tokenRequestCustomizer = tokenRequestCustomizerFactory ? . Invoke ( provider ) ;
239262
240263 var tokenRetriever = new OpenIdConnectUserAccessTokenRetriever (
241264 httpContextAccessor ,
@@ -244,8 +267,6 @@ public static IHttpClientBuilder AddUserAccessTokenHandler(
244267 tokenRequestCustomizer ) ;
245268
246269 return provider . BuildAccessTokenRequestHandler ( tokenRetriever ) ;
247-
248- #pragma warning restore CS0618 // Type or member is obsolete
249270 } ) ;
250271
251272 /// <summary>
@@ -257,9 +278,9 @@ public static IHttpClientBuilder AddUserAccessTokenHandler(
257278 public static IHttpClientBuilder AddClientAccessTokenHandler (
258279 this IHttpClientBuilder httpClientBuilder ,
259280 UserTokenRequestParameters ? parameters = null ) =>
260- AddClientAccessTokenHandler (
281+ AddClientAccessTokenHandlerInternal (
261282 httpClientBuilder ,
262- tokenRequestCustomizer : null ,
283+ tokenRequestCustomizerFactory : null ,
263284 parameters ) ;
264285
265286 /// <summary>
@@ -271,13 +292,36 @@ public static IHttpClientBuilder AddClientAccessTokenHandler(
271292 /// <returns></returns>
272293 public static IHttpClientBuilder AddClientAccessTokenHandler (
273294 this IHttpClientBuilder httpClientBuilder ,
274- ITokenRequestCustomizer ? tokenRequestCustomizer ,
295+ ITokenRequestCustomizer tokenRequestCustomizer ,
275296 UserTokenRequestParameters ? parameters = null ) =>
297+ AddClientAccessTokenHandlerInternal ( httpClientBuilder , _ => tokenRequestCustomizer , parameters ) ;
298+
299+ /// <summary>
300+ /// Adds the client access token handler to an HttpClient
301+ /// </summary>
302+ /// <param name="httpClientBuilder"></param>
303+ /// <param name="tokenRequestCustomizerFactory"></param>
304+ /// <param name="parameters"></param>
305+ /// <returns></returns>
306+ public static IHttpClientBuilder AddClientAccessTokenHandler (
307+ this IHttpClientBuilder httpClientBuilder ,
308+ Func < IServiceProvider , ITokenRequestCustomizer > tokenRequestCustomizerFactory ,
309+ UserTokenRequestParameters ? parameters = null )
310+ {
311+ ArgumentNullException . ThrowIfNull ( tokenRequestCustomizerFactory ) ;
312+ return AddClientAccessTokenHandlerInternal ( httpClientBuilder , tokenRequestCustomizerFactory , parameters ) ;
313+ }
314+
315+ private static IHttpClientBuilder AddClientAccessTokenHandlerInternal (
316+ IHttpClientBuilder httpClientBuilder ,
317+ Func < IServiceProvider , ITokenRequestCustomizer > ? tokenRequestCustomizerFactory ,
318+ UserTokenRequestParameters ? parameters ) =>
276319 httpClientBuilder . AddHttpMessageHandler ( provider =>
277320 {
278321 var tokenManager = provider . GetRequiredService < IClientCredentialsTokenManager > ( ) ;
279322 var schemeProvider = provider . GetRequiredService < IAuthenticationSchemeProvider > ( ) ;
280323 var options = provider . GetRequiredService < IOptions < UserTokenManagementOptions > > ( ) ;
324+ var tokenRequestCustomizer = tokenRequestCustomizerFactory ? . Invoke ( provider ) ;
281325
282326 var tokenRetriever = new OpenIdConnectClientAccessTokenRetriever ( tokenManager ,
283327 options ,
@@ -287,5 +331,4 @@ public static IHttpClientBuilder AddClientAccessTokenHandler(
287331
288332 return provider . BuildAccessTokenRequestHandler ( tokenRetriever ) ;
289333 } ) ;
290- #pragma warning restore CS0618 // Type or member is obsolete
291334}
0 commit comments