Exemplo n.º 1
0
        /// <summary>
        /// Add the AppTemplate setup to forward the current user's access token from the to the service.
        /// </summary>
        /// <param name="halClientSetup">Halcyon client setup.</param>
        /// <param name="configure">The configure callback.</param>
        /// <returns></returns>
        public static IHalcyonClientSetup <T> SetupHttpClientFactoryWithUserAccessToken <T>(this IHalcyonClientSetup <T> halClientSetup, Action <OpenIdConnectBearerClientOptions> configure)
        {
            var options = new OpenIdConnectBearerClientOptions();

            configure?.Invoke(options);

            if (options.GetAccessTokenCallback == null)
            {
                throw new InvalidOperationException("An access token callback must be provided. Use 'ClaimsPrincipalExtensions.GetAccessToken' from 'Threax.AspNetCore.AuthCore' for a good default with the rest of the framework.");
            }

            halClientSetup.Services.TryAddScoped <ILoggingInUserAccessor, LoggingInUserAccessor>();
            halClientSetup.Services.TryAddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            halClientSetup.Services.AddScoped <IHttpClientFactory <T> >(s =>
                                                                        new AddUserTokenHttpClientFactory <T>(p => options.GetAccessTokenCallback(p),
                                                                                                              s.GetRequiredService <IHttpContextAccessor>(),
                                                                                                              s.GetRequiredService <IHttpClientFactory>(),
                                                                                                              s.GetRequiredService <ILoggingInUserAccessor>()));

            return(halClientSetup);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Add the AppTemplate setup to use client credentials to connect to the service.
        /// </summary>
        /// <param name="halClientSetup">Halcyon client setup.</param>
        /// <param name="configure">The configure callback.</param>
        /// <returns></returns>
        public static IHalcyonClientSetup <T> SetupHttpClientFactoryWithClientCredentials <T>(this IHalcyonClientSetup <T> halClientSetup, Action <OpenIdConnectClientCredentialsClientOptions> configure)
        {
            var options = new OpenIdConnectClientCredentialsClientOptions();

            configure?.Invoke(options);

            var sharedCredentials = new SharedClientCredentials();

            options.GetSharedClientCredentials?.Invoke(sharedCredentials);
            sharedCredentials.MergeWith(options.ClientCredentials);

            halClientSetup.Services.AddSingleton <IHttpClientFactory <T> >(s =>
            {
                return(new ClientCredentialsAccessTokenFactory <T>(options.ClientCredentials, new BearerHttpClientFactory <T>(s.GetRequiredService <IHttpClientFactory>())));
            });

            return(halClientSetup);
        }