public void ConfigureServices()

in Application/API/ImageRecognition.API/Startup.cs [42:105]


        public void ConfigureServices(IServiceCollection services)
        {
            services.Configure<AppOptions>(Configuration.GetSection("AppOptions"));

            services.AddAWSService<IAmazonDynamoDB>();
            services.AddAWSService<IAmazonS3>();

            IdentityModelEventSource.ShowPII = true;

            services.AddResponseCompression(options =>
            {
                options.Providers.Add<BrotliCompressionProvider>();
                options.Providers.Add<GzipCompressionProvider>();
                options.EnableForHttps = true;
                options.MimeTypes = new[]
                    {"application/json", "text/tab-separated-values", "application/javascript", "text/csv", "text"};
            });

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    var region = Configuration["AWS:Region"];
                    if (string.IsNullOrEmpty(region)) region = FallbackRegionFactory.GetRegionEndpoint().SystemName;

                    var audience = Configuration["AWS:UserPoolClientId"];
                    var authority = $"https://cognito-idp.{region}.amazonaws.com/" + Configuration["AWS:UserPoolId"];

                    Console.WriteLine($"Configure JWT option, Audience: {audience}, Authority: {authority}");

                    options.Audience = audience;
                    options.Authority = authority;
                });

            services.AddAuthorization(options =>
            {
                options.AddPolicy("Admin", policy =>
                    policy.RequireClaim("cognito:groups", "Admin"));
            });

            services.AddControllers();

            // Register the Swagger services
            services.AddSwaggerDocument(document =>
            {
                // Add an authenticate button to Swagger for JWT tokens
                document.OperationProcessors.Add(new OperationSecurityScopeProcessor("JWT"));
                document.DocumentProcessors.Add(new SecurityDefinitionAppender("JWT", new OpenApiSecurityScheme
                {
                    Type = OpenApiSecuritySchemeType.ApiKey,
                    Name = "Authorization",
                    In = OpenApiSecurityApiKeyLocation.Header,
                    Description =
                        "Type into the textbox: Bearer {your JWT token}. You can get a JWT token from /Authorization/Authenticate."
                }));

                // Post process the generated document
                document.PostProcess = d =>
                {
                    d.Info.Title = "ImageRecognition API";
                    d.Info.Description = "API to manage albums and photos.";
                    d.Info.Version = "1.0.0";
                };
            });
        }