.NET 7 Minimal API:Swagger认证失败但Postman可正常访问
.NET 7 Web API Swagger调用返回401但Postman正常问题排查
问题描述
我有一个.NET 7版本的极简Web API,使用Swagger测试接口时会返回401未授权错误,但通过Postman调用相同接口却可以正常工作。
使用的NuGet包版本:
- Microsoft.AspNetCore.Authentication.JwtBearer -> 7.0.5
- Swashbuckle.AspNetCore -> 6.5.0
接口通过MapGet()方法末尾添加.RequireAuthorization(IdentityData.PermissionPolicyName)配置了授权策略,在Swagger中点击Authorize按钮输入"Bearer myToken"后调用Get接口返回401,但Postman执行相同请求正常。
相关配置代码
Swagger配置
var securityScheme = new OpenApiSecurityScheme { Name = "Authorization", Type = SecuritySchemeType.ApiKey, Scheme = "Bearer", BearerFormat = "JWT", In = ParameterLocation.Header, Description = "JWT Authorization header using the Bearer scheme. \r\n\r\n Enter 'Bearer' [space] and then your token in the text input below.\r\n\r\nExample: \"Bearer 12345abcdef\"", }; var securityReq = new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "bearerAuth" }, Name = "Bearer", In = ParameterLocation.Header }, Array.Empty<string>() } }; builder.Services.AddSwaggerGen(options => { options.SwaggerDoc("v1", new OpenApiInfo { Version = "v1" }); var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename)); options.EnableAnnotations(); options.DocInclusionPredicate((name, api) => true); options.AddSecurityDefinition("Bearer", securityScheme); options.AddSecurityRequirement(securityReq); });
认证与授权配置
builder.Services.AddOptions<JwtBearerOptions>(JwtBearerDefaults.AuthenticationScheme) .Configure<IStoreManager>( (options, storeManager) => options.TokenValidationParameters = new TokenValidationParameters { IssuerSigningKey = GetKeyFromAmagnoCertificate(storeManager), ValidateLifetime = true, ValidateIssuerSigningKey = true, ValidateIssuer = false, ValidateAudience = false }); builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(); builder.Services.AddAuthorization( options => { var requiredClaim = new AuthorizationPolicyBuilder().RequireAuthenticatedUser() .RequireClaim(IdentityData.PermissionClaimName, "GroupDocumentRecognitionSettings"); options.AddPolicy(IdentityData.PermissionPolicyName, requiredClaim.Build()); options.DefaultPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser() .Build(); });
中间件配置
app.UseAuthentication(); app.UseAuthorization();
疑问
我是否在Swagger配置中遗漏了什么内容?有没有人遇到过类似问题?
内容的提问来源于stack exchange,提问作者BenGeba
相关产品推荐
相关产品推荐

