34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
using Microsoft.AspNetCore.Authentication;
|
||
using Microsoft.AspNetCore.Authentication.JwtBearer;
|
||
using Microsoft.AspNetCore.OpenApi;
|
||
using Microsoft.OpenApi;
|
||
|
||
namespace Tiku.Api.OpenApi;
|
||
|
||
internal sealed class BearerSecuritySchemeTransformer(
|
||
IAuthenticationSchemeProvider authenticationSchemeProvider) : IOpenApiDocumentTransformer
|
||
{
|
||
public async Task TransformAsync(
|
||
OpenApiDocument document,
|
||
OpenApiDocumentTransformerContext context,
|
||
CancellationToken cancellationToken)
|
||
{
|
||
var authenticationSchemes = await authenticationSchemeProvider.GetAllSchemesAsync();
|
||
if (authenticationSchemes.All(scheme => scheme.Name != JwtBearerDefaults.AuthenticationScheme))
|
||
{
|
||
return;
|
||
}
|
||
|
||
document.Components ??= new OpenApiComponents();
|
||
document.Components.SecuritySchemes ??= new Dictionary<string, IOpenApiSecurityScheme>();
|
||
document.Components.SecuritySchemes["BearerAuth"] = new OpenApiSecurityScheme
|
||
{
|
||
Type = SecuritySchemeType.Http,
|
||
Scheme = "bearer",
|
||
BearerFormat = "JWT",
|
||
In = ParameterLocation.Header,
|
||
Description = "输入 JWT access token。不要带 Bearer 前缀,Scalar 会自动补。"
|
||
};
|
||
}
|
||
}
|