add some filter to see which endpoints require authorization and which not

This commit is contained in:
Вячеслав 2025-04-27 15:56:47 +05:00
parent d8968ce557
commit bfcba0beb7
2 changed files with 39 additions and 14 deletions

View file

@ -0,0 +1,36 @@
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Authorization;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace SurveyBackend.Filters;
public class EndpointAuthRequirementFilter : IOperationFilter
{
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (!context.ApiDescription
.ActionDescriptor
.EndpointMetadata
.OfType<AuthorizeAttribute>()
.Any())
{
return;
}
operation.Security = new List<OpenApiSecurityRequirement>
{
new OpenApiSecurityRequirement
{
[new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = JwtBearerDefaults.AuthenticationScheme
}
}] = new List<string>()
}
};
}
}

View file

@ -7,6 +7,7 @@ using SurveyBackend.Contexts;
using SurveyBackend.Core.Contexts; using SurveyBackend.Core.Contexts;
using SurveyBackend.Core.Repositories; using SurveyBackend.Core.Repositories;
using SurveyBackend.Core.Services; using SurveyBackend.Core.Services;
using SurveyBackend.Filters;
using SurveyBackend.Infrastructure.Data; using SurveyBackend.Infrastructure.Data;
using SurveyBackend.Infrastructure.Repositories; using SurveyBackend.Infrastructure.Repositories;
using SurveyBackend.Middlewares; using SurveyBackend.Middlewares;
@ -84,20 +85,8 @@ public class Program
Name = "Authorization", Name = "Authorization",
Type = SecuritySchemeType.ApiKey Type = SecuritySchemeType.ApiKey
}); });
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{ c.OperationFilter<EndpointAuthRequirementFilter>();
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = JwtBearerDefaults.AuthenticationScheme
}
},
Array.Empty<string>()
}
});
var filePath = Path.Combine(System.AppContext.BaseDirectory, "SurveyBackend.API.xml"); var filePath = Path.Combine(System.AppContext.BaseDirectory, "SurveyBackend.API.xml");
c.IncludeXmlComments(filePath); c.IncludeXmlComments(filePath);