/
ivanstrike
/
tasker
Обзор
Документация
Войти
/
ivanstrike
/
tasker
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
Swagger/SecurityRequirementsOperationFilter.cs
89 строк
3 KB
ivanstrike
Лабораторная работа 2
08 ноя 2025, 11:16
08 ноя 2025, 11:16
ec39293
Код
Авторство
О чём код?
using Microsoft.OpenApi.Models; using Swashbuckle.AspNetCore.SwaggerGen; namespace TaskerApi.Swagger; /// <summary> /// Фильтр для автоматического применения правильной схемы аутентификации в Swagger /// </summary> public class SecurityRequirementsOperationFilter : IOperationFilter { public void Apply(OpenApiOperation operation, OperationFilterContext context) { // Определяем, к какой группе API относится endpoint var actionDescriptor = context.ApiDescription.ActionDescriptor; var controllerName = actionDescriptor.RouteValues["controller"]; // Internal API - требует X-Api-Key if (controllerName?.Equals("Internal", StringComparison.OrdinalIgnoreCase) == true) { operation.Security = new List<OpenApiSecurityRequirement> { new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "ApiKey" } }, Array.Empty<string>() } } }; } else if (controllerName?.Equals("Auth", StringComparison.OrdinalIgnoreCase) == true) { var methodName = context.ApiDescription.ActionDescriptor.RouteValues["action"]; if (methodName?.Equals("GetCurrentUser", StringComparison.OrdinalIgnoreCase) == true || methodName?.Equals("me", StringComparison.OrdinalIgnoreCase) == true) { operation.Security = new List<OpenApiSecurityRequirement> { new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, Array.Empty<string>() } } }; } else { operation.Security = new List<OpenApiSecurityRequirement>(); } } else { operation.Security = new List<OpenApiSecurityRequirement> { new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, Array.Empty<string>() } } }; } } }