【问题标题】:Support Token Based Authentication in Swagger Documentation for Web API在 Web API 的 Swagger 文档中支持基于令牌的身份验证
【发布时间】:2015-05-26 04:21:40
【问题描述】:

我正在尝试使用 swagger(SwashBuckle) 来生成 Web api 文档。我已经使用Web API documentation using swagger 成功生成了文档,但我无法成功发送 API 请求,因为我们为少数方法提供了基于令牌的身份验证(用于身份验证的自定义标头)。

我试图找出相同的示例代码/资源,但运气不佳。如果有人在他们的应用程序中实现/遇到过类似的事情,请告诉我。

【问题讨论】:

  • 您确实应该在问题中添加您在尝试添加代码时实际采取了哪些步骤,以及结果如何,特别是如果这些步骤是部分的。也不清楚你是如何测试它是否成功的。

标签: c# asp.net-web-api swagger swashbuckle


【解决方案1】:

前段时间我也遇到了同样的问题,在博客http://bitoftech.net/2014/08/25/asp-net-web-api-documentation-using-swagger/求解决方法。

这是对我有用的答案:

1.添加名为“SwaggerExtensions”的新文件,然后添加名为“onComplete.js”的新JS文件,您必须将此文件的构建操作更改为“Embedded Resource”。

2.在文件“onComplete.js”中粘贴以下代码:

$('#input_apiKey').change(function () {

var key = $('#input_apiKey')[0].value;
if (key && key.trim() != "") {
key = "Bearer " + key;
window.authorizations.add("key", new ApiKeyAuthorization("Authorization", key, "header"));
}
});

3.打开文件“SwaggerConfig.cs”并在注册方法中粘贴以下代码:

SwaggerUiConfig.Customize(c =>
{
c.SupportHeaderParams = true;
c.InjectJavaScript(typeof(SwaggerConfig).Assembly, "AngularJSAuthentication.API.SwaggerExtensions.onComplete.js");
});

请注意,您需要更改完整的程序集名称以匹配您的程序集名称。

我相信就是这样,一旦你运行 UI 你会注意到这个文件已经被下载并且它会正确设置授权头。

【讨论】:

  • 感谢您的回答。对于指定了 OverrideAuthentication 属性的方法,您有任何解决方案吗?
  • 我很困惑,AngularJS和这个有什么关系?
  • @zespri 这只是在哪里可以找到“onComple.js”文件的程序集。您应该更改它以绑定您的程序集名称。
【解决方案2】:

您需要设置 API Key 授权。 https://github.com/domaindrivendev/Swashbuckle README 中的“描述安全/授权方案”对此有详细说明,但简而言之,您需要在调用 httpConfiguration.EnableSwagger() 时执行以下操作

c.ApiKey("apiKey")
  .Description("API Key Authentication")
  .Name("apiKey")
  .In("header");

然后,您需要创建一个从 IDocumentFilter 派生的自定义属性,并将其应用于控制器中的适当方法。假设您将此称为 ApiKeyFilter。然后,您需要通过在 EnableSwagger() 中添加以下内容来向 Swagger 注册它

c.OperationFilter<ApiKeyFilter>();

我不知道 ApiKey 属性的示例代码,但我之前在 OAuth2 中使用过 https://github.com/domaindrivendev/Swashbuckle/blob/master/Swashbuckle.Dummy.Core/SwaggerExtensions/AssignOAuth2SecurityRequirements.cs,您应该能够适应它。

【讨论】:

  • 感谢您的回答。对于指定了 OverrideAuthentication 属性的方法,您有任何解决方案吗?
猜你喜欢
  • 2017-04-19
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
  • 2016-07-31
  • 2016-06-09
  • 1970-01-01
  • 2017-07-01
  • 2016-07-16
相关资源
最近更新 更多