如何在ASP.NET 5中为Swagger UI基本身份验证表单添加CustomerId参数
解决方案
你需要额外新增一个ApiKey类型的安全定义来对应CustomerId请求头,同时调整安全要求,让两个安全方案同时生效,这样Swagger UI的授权表单就会同时出现用户名、密码、CustomerId三个输入项。
第一步:修改ConfigureServices中的Swagger配置
替换你原来的Swagger配置代码如下:
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); #region Configure Swagger services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "BasicAuth", Version = "v1" }); // 原有基础身份验证安全定义 c.AddSecurityDefinition("basic", new OpenApiSecurityScheme { Name = "Authorization", Type = SecuritySchemeType.Http, Scheme = "basic", In = ParameterLocation.Header, Description = "基础身份验证请求头" }); // 新增CustomerId请求头安全定义 c.AddSecurityDefinition("customerId", new OpenApiSecurityScheme { Name = "CustomerId", Type = SecuritySchemeType.ApiKey, In = ParameterLocation.Header, Description = "自定义客户ID请求头参数" }); // 调整安全要求,两个验证方案同时生效 c.AddSecurityRequirement(new OpenApiSecurityRequirement { { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "basic" } }, new string[] {} }, { new OpenApiSecurityScheme { Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "customerId" } }, new string[] {} } }); }); #endregion }
第二步:验证效果
启动项目打开Swagger UI后,点击「Authorize」按钮,弹出的授权表单会同时展示三个输入项:
- 基础认证对应的用户名输入框
- 基础认证对应的密码输入框
- 自定义的CustomerId输入框
三个值都填写完成后点击授权,后续所有请求会自动在Header中带上Authorization和CustomerId两个参数,满足你的鉴权需求。
补充说明
如果你需要对部分接口豁免CustomerId校验,可以在对应接口上添加[AllowAnonymous]特性,或者通过OperationFilter自定义控制哪些接口需要校验这个参数。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

