updated Microser (gateway)

This commit is contained in:
M. Akif Tokatlioglu
2024-03-31 10:10:36 +03:00
parent 7c19b96d81
commit 2f2a39584d
22 changed files with 267 additions and 24 deletions

View File

@@ -6,7 +6,7 @@ namespace Microser.API.Weather.Controllers;
[Authorize(Policy = "ClientIdPolicy")]
[ApiController]
[Route("[controller]")]
[Route("api/[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly ILogger<WeatherForecastController> _logger;

View File

@@ -1,4 +1,4 @@
<Project Sdk="Microsoft.NET.Sdk.Web">
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>

View File

@@ -1,4 +1,7 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
internal class Program
{
@@ -11,7 +14,46 @@ internal class Program
builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
builder.Services.AddSwaggerGen(options =>
{
options.SwaggerDoc("v1", new OpenApiInfo { Title = "Microser.API.Weather", Version = "v1" });
options.AddSecurityDefinition("oauth2", new OpenApiSecurityScheme
{
Type = SecuritySchemeType.OAuth2,
Flows = new OpenApiOAuthFlows
{
AuthorizationCode = new OpenApiOAuthFlow
{
AuthorizationUrl = new Uri("https://localhost:5001/connect/authorize"),
TokenUrl = new Uri("https://localhost:5001/connect/token"),
Scopes = new Dictionary<string, string>
{
{"openid", "OpenId - full access"},
{"profile", "Profile - full access"},
{"address", "Address - full access"},
{"email", "Email - full access"},
{"roles", "Your role(s) - full access"},
{"scope1", "scope1 - full access"},
{"microser_api_weather", "microser_api_weather - full access"},
}
}
}
});
options.OperationFilter<AuthorizeCheckOperationFilter>();
});
builder.Services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
@@ -25,7 +67,7 @@ internal class Program
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("ClientIdPolicy", policy => policy.RequireClaim("client_id", "microser_api_weather", "dotnet_blazor_serverapp"));
options.AddPolicy("ClientIdPolicy", policy => policy.RequireClaim("client_id", "microser_api_weather", "dotnet_blazor_serverapp", "dotnet_api_swagger"));
});
var app = builder.Build();
@@ -34,7 +76,17 @@ internal class Program
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
//app.UseSwaggerUI();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Microser.API.Weather v1");
options.OAuthClientId("dotnet_api_swagger");
options.OAuthClientSecret("76CD4B0FC93846F08395BF8994B86BC6");
options.OAuthAppName("Microser.API.Weather - Swagger");
options.OAuthUsePkce();
});
}
app.UseHttpsRedirection();
@@ -47,4 +99,28 @@ internal class Program
app.Run();
}
}
public class AuthorizeCheckOperationFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
var hasAuthorize = context.MethodInfo.DeclaringType.GetCustomAttributes(true).OfType<AuthorizeAttribute>().Any() ||
context.MethodInfo.GetCustomAttributes(true).OfType<AuthorizeAttribute>().Any();
if (hasAuthorize)
{
operation.Responses.Add("401", new OpenApiResponse { Description = "Unauthorized" });
operation.Responses.Add("403", new OpenApiResponse { Description = "Forbidden" });
operation.Security = new List<OpenApiSecurityRequirement>
{
new OpenApiSecurityRequirement
{
[new OpenApiSecurityScheme {Reference = new OpenApiReference {Type = ReferenceType.SecurityScheme, Id = "oauth2"}}]
= new[] {"api1"}
}
};
}
}
}