提问者:小点点

Swagger文档支持基于令牌的WebAPI认证


我正在尝试swagger(SwashBuckle)生成web api留档。我已经使用swagger成功地生成了WebAPI留档,但我无法成功发送API请求,因为我们有基于令牌的身份验证(用于身份验证目的的自定义标头)。

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


共2个答案

匿名用户

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

这是对我有用的答案:

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

2.在文件“onComplet. 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.Open文件"SwaggerConfig. cs"并在寄存器方法中粘贴以下代码:

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

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

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

匿名用户

您需要设置API密钥授权。https://github.com/domaindrivendev/Swashbuckle自述文件中的“描述安全/授权方案”对此有详细说明,但简而言之,您需要在调用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,您应该能够适应它。