diff --git a/FunGame.Implement/FunGame.Implement.csproj b/FunGame.Implement/FunGame.Implement.csproj index 23e2bb6..51ecb1c 100644 --- a/FunGame.Implement/FunGame.Implement.csproj +++ b/FunGame.Implement/FunGame.Implement.csproj @@ -1,7 +1,7 @@ - net9.0 + net10.0 enable enable ..\bin diff --git a/FunGame.Server/FunGame.Server.csproj b/FunGame.Server/FunGame.Server.csproj index 1d93f51..c30dc0d 100644 --- a/FunGame.Server/FunGame.Server.csproj +++ b/FunGame.Server/FunGame.Server.csproj @@ -1,8 +1,8 @@ - + Exe - net9.0 + net10.0 enable enable ..\bin @@ -39,9 +39,8 @@ - - - + + diff --git a/FunGame.WebAPI/Architecture/SecurityDocumentTransformer.cs b/FunGame.WebAPI/Architecture/SecurityDocumentTransformer.cs index 5852035..88839cf 100644 --- a/FunGame.WebAPI/Architecture/SecurityDocumentTransformer.cs +++ b/FunGame.WebAPI/Architecture/SecurityDocumentTransformer.cs @@ -1,38 +1,44 @@ +using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.OpenApi; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; namespace Milimoe.FunGame.WebAPI.Architecture { - public class SecurityDocumentTransformer : IOpenApiDocumentTransformer + public class SecurityDocumentTransformer(IAuthenticationSchemeProvider authenticationSchemeProvider) : IOpenApiDocumentTransformer { public async Task TransformAsync(OpenApiDocument document, OpenApiDocumentTransformerContext context, CancellationToken cancellationToken) { - document.Components ??= new OpenApiComponents(); - document.Components.SecuritySchemes = new Dictionary + IEnumerable authenticationSchemes = await authenticationSchemeProvider.GetAllSchemesAsync(); + if (authenticationSchemes.Any(authScheme => authScheme.Name == "Bearer")) { + Dictionary securitySchemes = new() { - "Bearer", new OpenApiSecurityScheme + ["Bearer"] = new OpenApiSecurityScheme { Type = SecuritySchemeType.Http, Scheme = "bearer", BearerFormat = "JWT", - Description = "BearerToken" + In = ParameterLocation.Header } - } - }; - document.SecurityRequirements = [ - new() + }; + document.Components ??= new OpenApiComponents(); + document.Components.SecuritySchemes = securitySchemes; + + foreach (KeyValuePair operation in document.Paths.Values.SelectMany(path => path.Operations!)) { + operation.Value.Security ??= []; + operation.Value.Security.Add(new OpenApiSecurityRequirement { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - Array.Empty() - } + [new OpenApiSecuritySchemeReference("Bearer", document)] = [] + }); } - ]; - await Task.CompletedTask; + } + document.Info = new() + { + Title = "FunGame Web API", + Version = "v1", + Description = "Welcome to FunGame Web API document." + }; } } } diff --git a/FunGame.WebAPI/FunGame.WebAPI.csproj b/FunGame.WebAPI/FunGame.WebAPI.csproj index caac121..ba48e8a 100644 --- a/FunGame.WebAPI/FunGame.WebAPI.csproj +++ b/FunGame.WebAPI/FunGame.WebAPI.csproj @@ -1,7 +1,7 @@  - net9.0 + net10.0 enable enable Milimoe.$(MSBuildProjectName.Replace(" ", "_")) @@ -24,10 +24,9 @@ - - - - + + + diff --git a/FunGame.WebAPI/Program.cs b/FunGame.WebAPI/Program.cs index ac032fc..e3a544f 100644 --- a/FunGame.WebAPI/Program.cs +++ b/FunGame.WebAPI/Program.cs @@ -119,11 +119,11 @@ try } } } - // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle + // 添加 OpenAPI 文档 builder.Services.AddEndpointsApiExplorer(); builder.Services.AddOpenApi(options => { - options.AddDocumentTransformer(new SecurityDocumentTransformer()); + options.AddDocumentTransformer(); }); // 添加 CORS 服务 builder.Services.AddCors(options =>