c# - 如何强制 Swagger/Swashbuckle 附加 API key ?

标签 c# .net-core swagger swashbuckle

我有一个 .NET Core 2.x 项目,它集成了 Swagger 和 Swashbuckle v4.x。这一切都非常有效。

但是,现在我需要以 www.foo.com/myendpoint?authorization=APIKEY 的形式将查询字符串附加到 Swagger 触发的每个 GET。为此,我在 Startup.ConfigureServices 中有以下内容:

services.AddSwaggerGen(c => {
  c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });

  c.AddSecurityDefinition("api key", new ApiKeyScheme() {
      Description = "Authorization query string expects API key",
      In = "query",
      Name = "authorization",
      Type = "apiKey"
  });
}); 

当我启动 swagger 时,它会显示一个对话框并在我输入 API key 时成功接受它。但是,所有 API 调用仍然在没有查询字符串的情况下发出。

我错过了什么?

enter image description here

最佳答案

特别是 Swashbuckle,(NSwag 有它自己的注册授权流程的方法)仅仅定义安全定义是不够的,您还需要注册使用它的操作。

由于您想将 api key 附加到所有操作,因此您的用例非常简单:只需为您的定义注册安全要求,您可以这样做:

c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>> { { "api key", new[] {} } };

您可以阅读更多有关如何为您的操作定义、自定义和注册不同授权方案的信息here .

对于即将发布的 Swashbuckle v5,可以使用以下代码:

c.AddSecurityDefinition("api key", new OpenApiSecurityScheme {
    Type = SecuritySchemeType.ApiKey,
    In = ParameterLocation.Query,
    Name = "authorization",
    Description = "Authorization query string expects API key"
});

var key = new OpenApiSecurityScheme() { Name = "api key"};
var requirement = new OpenApiSecurityRequirement {
    { key, new List<string>() }
};
c.AddSecurityRequirement(requirement);

关于c# - 如何强制 Swagger/Swashbuckle 附加 API key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56535077/

相关文章:

c# - .NET Framework 中的并发 HashSet<T>?

xamarin - 错误 MSB1003 : Specify a project or solution file. 当前工作目录不包含项目或解决方案文件

java - 序列化日期 : Swagger and Spring-MVC

spring - 在 Springfox Swagger UI 中如何配置标题、描述和许可证?

c# - 如何使用泛型来处理 Action<IBuilder<T>> 中特定于类型的配置?

c# - Linq 在提交更改之前找不到插入的记录

c# - 偷看后从并发队列中删除元素的模式

.net-core - DevOps 托管管道无法构建 .NET Core 2.2

c# - FluentValidation 能否识别调用了哪些方法(PUT 或 POST)?

.net-core - 我如何告诉 Swashbuckle 5 在 dotnetcore 3.0 中需要主体内容?