如何在带Identity Server的ASP.NET Core Web API中配置Swagger支持认证访问
解决Swagger访问认证端点及集成Identity凭证输入的方案
一、让Swagger支持身份认证(访问需授权的端点)
要访问带[Authorize]属性的端点,需要给Swagger配置认证方案,让它能接收并携带凭证请求接口。
- 配置Swagger生成器的安全规则
在服务注册阶段(builder.Services.AddSwaggerGen)添加认证定义和全局安全要求:
builder.Services.AddSwaggerGen(c => { // 定义JWT认证方案(如果用JWT的话) c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { Description = "请输入格式为 `Bearer {Token}` 的认证信息", Name = "Authorization", In = ParameterLocation.Header, Type = SecuritySchemeType.Http, Scheme = "Bearer" }); // 给所有接口默认添加认证要求 c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } }, Array.Empty<string>() } }); // 可选:添加XML注释,让Swagger显示更详细的接口说明(包括Identity端点) var xmlFileName = $"{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml"; c.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFileName), includeControllerXmlComments: true); });
- 配置SwaggerUI启用认证入口
修改UseSwaggerUI的配置,让界面显示"Authorize"按钮,方便输入凭证:
application.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "你的API V1版本"); // Swagger会自动识别上面定义的Bearer方案,显示Authorize按钮,无需额外配置即可输入Token });
二、暴露Identity端点并在Swagger中使用
可以通过ASP.NET Core的Identity API端点功能,快速生成注册、登录等接口,并在Swagger中直接测试获取凭证。
- 启用Identity API端点
在服务注册和中间件配置中添加Identity端点支持:
// 服务注册 builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); // 启用Identity的REST API端点 builder.Services.AddIdentityApiEndpoints<IdentityUser>() .AddEntityFrameworkStores<ApplicationDbContext>(); // 中间件配置(放在UseRouting之后,UseAuthorization之前) app.MapIdentityApi<IdentityUser>();
- 在Swagger中获取并使用Identity凭证
- 启动项目后,打开SwaggerUI,找到
/login端点,发送POST请求(传入用户名和密码),获取返回的token。 - 点击SwaggerUI顶部的"Authorize"按钮,输入
Bearer {获取到的token},点击"Authorize"完成认证。 - 此时再访问带
[Authorize]属性的端点,Swagger会自动携带认证头,即可正常访问。
注意事项
- 如果你的API使用Cookie认证而非JWT,只需将Swagger的安全定义改成对应Scheme(比如"Cookie")即可。
- 确保控制器或接口上的
[Authorize]属性配置正确,Swagger会自动识别并标记需要认证的接口。
内容的提问来源于stack exchange,提问作者ELOL
相关产品推荐
相关产品推荐

