diff --git a/src/consumer/EventTriangleAPI.Consumer.Domain/EventTriangleAPI.Consumer.Domain.csproj b/src/consumer/EventTriangleAPI.Consumer.Domain/EventTriangleAPI.Consumer.Domain.csproj index eb2460e9..60b0fb2c 100644 --- a/src/consumer/EventTriangleAPI.Consumer.Domain/EventTriangleAPI.Consumer.Domain.csproj +++ b/src/consumer/EventTriangleAPI.Consumer.Domain/EventTriangleAPI.Consumer.Domain.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/src/consumer/EventTriangleAPI.Consumer.Presentation/Controllers/WeatherForecastController.cs b/src/consumer/EventTriangleAPI.Consumer.Presentation/Controllers/WeatherForecastController.cs index ba1c0456..79d9d1b7 100644 --- a/src/consumer/EventTriangleAPI.Consumer.Presentation/Controllers/WeatherForecastController.cs +++ b/src/consumer/EventTriangleAPI.Consumer.Presentation/Controllers/WeatherForecastController.cs @@ -1,3 +1,4 @@ +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; namespace EventTriangleAPI.Consumer.Presentation.Controllers; @@ -17,9 +18,23 @@ public WeatherForecastController(ILogger logger) { _logger = logger; } + + [Authorize(Roles = "User, Admin")] + [HttpGet("user_and_admin")] + public IEnumerable GetForUserAndAdmin() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateTime.Now.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }) + .ToArray(); + } - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() + [Authorize(Roles = "Admin")] + [HttpGet("admin")] + public IEnumerable GetForAdmin() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { diff --git a/src/consumer/EventTriangleAPI.Consumer.Presentation/EventTriangleAPI.Consumer.Presentation.csproj b/src/consumer/EventTriangleAPI.Consumer.Presentation/EventTriangleAPI.Consumer.Presentation.csproj index 6108b7b2..b6a1ce32 100644 --- a/src/consumer/EventTriangleAPI.Consumer.Presentation/EventTriangleAPI.Consumer.Presentation.csproj +++ b/src/consumer/EventTriangleAPI.Consumer.Presentation/EventTriangleAPI.Consumer.Presentation.csproj @@ -7,7 +7,11 @@ - + + + + + diff --git a/src/consumer/EventTriangleAPI.Consumer.Presentation/Program.cs b/src/consumer/EventTriangleAPI.Consumer.Presentation/Program.cs index 8264bac5..64581f84 100644 --- a/src/consumer/EventTriangleAPI.Consumer.Presentation/Program.cs +++ b/src/consumer/EventTriangleAPI.Consumer.Presentation/Program.cs @@ -1,23 +1,31 @@ -var builder = WebApplication.CreateBuilder(args); +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.Identity.Web; +using Microsoft.IdentityModel.Logging; -// Add services to the container. +var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); +var configurationSection = builder.Configuration.GetSection("AzureAd"); + +builder.Services + .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddMicrosoftIdentityWebApi(configurationSection); + var app = builder.Build(); -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); -} +IdentityModelEventSource.ShowPII = true; + +app.UseSwagger(); +app.UseSwaggerUI(); + app.UseHttpsRedirection(); +app.UseAuthentication(); + app.UseAuthorization(); app.MapControllers(); diff --git a/src/consumer/EventTriangleAPI.Consumer.Presentation/appsettings.Development.json b/src/consumer/EventTriangleAPI.Consumer.Presentation/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/src/consumer/EventTriangleAPI.Consumer.Presentation/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/src/consumer/EventTriangleAPI.Consumer.Presentation/appsettings.json b/src/consumer/EventTriangleAPI.Consumer.Presentation/appsettings.json index 10f68b8c..456ad74a 100644 --- a/src/consumer/EventTriangleAPI.Consumer.Presentation/appsettings.json +++ b/src/consumer/EventTriangleAPI.Consumer.Presentation/appsettings.json @@ -5,5 +5,11 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "AzureAd": { + "Instance": "https://login.microsoftonline.com/", + "TenantId": "b40a105f-0643-4922-8e60-10fc1abf9c4b", + "ClientId": "25128d03-9817-4e11-bddf-dc5f6df4042a", + "Scopes": "EventTriangleLocalAuth.All" + } } diff --git a/src/sender/EventTriangleAPI.Sender.Domain/EventTriangleAPI.Sender.Domain.csproj b/src/sender/EventTriangleAPI.Sender.Domain/EventTriangleAPI.Sender.Domain.csproj index eb2460e9..60b0fb2c 100644 --- a/src/sender/EventTriangleAPI.Sender.Domain/EventTriangleAPI.Sender.Domain.csproj +++ b/src/sender/EventTriangleAPI.Sender.Domain/EventTriangleAPI.Sender.Domain.csproj @@ -6,4 +6,8 @@ enable + + + + diff --git a/src/sender/EventTriangleAPI.Sender.Presentation/Controllers/WeatherForecastController.cs b/src/sender/EventTriangleAPI.Sender.Presentation/Controllers/WeatherForecastController.cs index 31e52055..3c813edd 100644 --- a/src/sender/EventTriangleAPI.Sender.Presentation/Controllers/WeatherForecastController.cs +++ b/src/sender/EventTriangleAPI.Sender.Presentation/Controllers/WeatherForecastController.cs @@ -1,9 +1,12 @@ +using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; +using Microsoft.Identity.Web.Resource; namespace EventTriangleAPI.Sender.Presentation.Controllers; [ApiController] [Route("[controller]")] +[RequiredScope(RequiredScopesConfigurationKey = "AzureAd:Scopes")] public class WeatherForecastController : ControllerBase { private static readonly string[] Summaries = new[] @@ -18,8 +21,22 @@ public WeatherForecastController(ILogger logger) _logger = logger; } - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() + [Authorize(Roles = "User, Admin")] + [HttpGet("user_and_admin")] + public IEnumerable GetForUserAndAdmin() + { + return Enumerable.Range(1, 5).Select(index => new WeatherForecast + { + Date = DateTime.Now.AddDays(index), + TemperatureC = Random.Shared.Next(-20, 55), + Summary = Summaries[Random.Shared.Next(Summaries.Length)] + }) + .ToArray(); + } + + [Authorize(Roles = "Admin")] + [HttpGet("admin")] + public IEnumerable GetForAdmin() { return Enumerable.Range(1, 5).Select(index => new WeatherForecast { diff --git a/src/sender/EventTriangleAPI.Sender.Presentation/EventTriangleAPI.Sender.Presentation.csproj b/src/sender/EventTriangleAPI.Sender.Presentation/EventTriangleAPI.Sender.Presentation.csproj index 6108b7b2..4964aae2 100644 --- a/src/sender/EventTriangleAPI.Sender.Presentation/EventTriangleAPI.Sender.Presentation.csproj +++ b/src/sender/EventTriangleAPI.Sender.Presentation/EventTriangleAPI.Sender.Presentation.csproj @@ -7,7 +7,11 @@ - + + + + + diff --git a/src/sender/EventTriangleAPI.Sender.Presentation/Program.cs b/src/sender/EventTriangleAPI.Sender.Presentation/Program.cs index 8264bac5..e1d7e191 100644 --- a/src/sender/EventTriangleAPI.Sender.Presentation/Program.cs +++ b/src/sender/EventTriangleAPI.Sender.Presentation/Program.cs @@ -1,23 +1,32 @@ -var builder = WebApplication.CreateBuilder(args); +using Microsoft.AspNetCore.Authentication.JwtBearer; +using Microsoft.Identity.Web; +using Microsoft.IdentityModel.Logging; -// Add services to the container. +var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); -// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); +var configurationSection = builder.Configuration.GetSection("AzureAd"); + +builder.Services + .AddAuthentication(JwtBearerDefaults.AuthenticationScheme) + .AddMicrosoftIdentityWebApi(configurationSection); + var app = builder.Build(); -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.UseSwagger(); - app.UseSwaggerUI(); -} +IdentityModelEventSource.ShowPII = true; + + +app.UseSwagger(); +app.UseSwaggerUI(); + app.UseHttpsRedirection(); +app.UseAuthentication(); + app.UseAuthorization(); app.MapControllers(); diff --git a/src/sender/EventTriangleAPI.Sender.Presentation/appsettings.Development.json b/src/sender/EventTriangleAPI.Sender.Presentation/appsettings.Development.json deleted file mode 100644 index 0c208ae9..00000000 --- a/src/sender/EventTriangleAPI.Sender.Presentation/appsettings.Development.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - } -} diff --git a/src/sender/EventTriangleAPI.Sender.Presentation/appsettings.json b/src/sender/EventTriangleAPI.Sender.Presentation/appsettings.json index 10f68b8c..456ad74a 100644 --- a/src/sender/EventTriangleAPI.Sender.Presentation/appsettings.json +++ b/src/sender/EventTriangleAPI.Sender.Presentation/appsettings.json @@ -5,5 +5,11 @@ "Microsoft.AspNetCore": "Warning" } }, - "AllowedHosts": "*" + "AllowedHosts": "*", + "AzureAd": { + "Instance": "https://login.microsoftonline.com/", + "TenantId": "b40a105f-0643-4922-8e60-10fc1abf9c4b", + "ClientId": "25128d03-9817-4e11-bddf-dc5f6df4042a", + "Scopes": "EventTriangleLocalAuth.All" + } } diff --git a/src/shared/EventTriangleAPI.Shared.Application/EventTriangleAPI.Shared.Application.csproj b/src/shared/EventTriangleAPI.Shared.Application/EventTriangleAPI.Shared.Application.csproj index eb2460e9..79ab4e2a 100644 --- a/src/shared/EventTriangleAPI.Shared.Application/EventTriangleAPI.Shared.Application.csproj +++ b/src/shared/EventTriangleAPI.Shared.Application/EventTriangleAPI.Shared.Application.csproj @@ -6,4 +6,11 @@ enable + + + + + + +