コード例 #1
0
 public CountryDataAccess(IOptions <KeyVaultAd> keyVaultOptions,
                          IKeyVaultClient keyVaultClient)
 {
     this.keyVaultOptions = keyVaultOptions.Value;
     this.keyVaultClient  = keyVaultClient;
 }
コード例 #2
0
ファイル: Startup.cs プロジェクト: devsoftx/my-api
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure <CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded    = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddProtectWebApiWithMicrosoftIdentityPlatformV2(Configuration);

            services.Configure <KeyVaultAd>(options => Configuration.GetSection(nameof(KeyVaultAd)).Bind(options));
            services.AddMvc(options =>
            {
                var policy = new AuthorizationPolicyBuilder()
                             .RequireAuthenticatedUser()
                             .Build();
                options.Filters.Add(new AuthorizeFilter(policy));
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            services.AddResponseCompression(options =>
            {
                options.Providers.Add <GzipCompressionProvider>();
                options.MimeTypes =
                    ResponseCompressionDefaults.MimeTypes.Concat(
                        new[] { "text/json" });
            });

            services.Configure <GzipCompressionProviderOptions>(options =>
            {
                options.Level = CompressionLevel.Fastest;
            });

            services.AddMemoryCache();
            services.AddCors();
            services.AddCors(options =>
            {
                options.AddPolicy("AllowAllHeaders",
                                  builder =>
                {
                    builder.AllowAnyOrigin()
                    .AllowAnyMethod()
                    .AllowAnyHeader().WithExposedHeaders();
                });
            });

            var keyVaultAd = new KeyVaultAd();

            Configuration.GetSection(nameof(KeyVaultAd)).Bind(keyVaultAd);
            var handler = new HttpClientHandler
            {
                Proxy = new WebProxy
                {
                    Address               = new Uri(keyVaultAd.ProxyUrl),
                    BypassProxyOnLocal    = false,
                    UseDefaultCredentials = false,

                    // *** These creds are given to the proxy server, not the web server ***
                    Credentials = new NetworkCredential(keyVaultAd.ProxyUsername, keyVaultAd.ProxyPassword)
                }
            };

            var kv = new KeyVaultClient(
                async(string authority, string resource, string scope) =>
            {
                var authContext             = new AuthenticationContext(authority);
                var clientId                = Configuration.GetSection("AzureAd").GetValue <string>("ClientId");
                var clientSecret            = Configuration.GetSection("AzureAd").GetValue <string>("ClientSecret");
                ClientCredential clientCred = new ClientCredential(clientId, clientSecret);
                AuthenticationResult result = await authContext.AcquireTokenAsync(resource, clientCred);
                if (result == null)
                {
                    throw new InvalidOperationException("Failed to retrieve access token for Key Vault");
                }

                return(result.AccessToken);
            }, new HttpClient(handler, true)
                );



            services.AddSingleton <IKeyVaultClient>(kv);

            // Register DA
            services.AddTransient <ICountryDataAccess, CountryDataAccess>();

            // Register Services
            services.AddTransient <ICountryService, CountryService>();
        }