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";
};
});
}