簡體   English   中英

在 Web API 的 Swagger 文檔中支持基於令牌的身份驗證

[英]Support Token Based Authentication in Swagger Documentation for Web API

我正在嘗試使用 swagger( SwashBuckle ) 來生成 web api 文檔。 我已經使用 swagger使用Web API 文檔成功生成了文檔,但我無法成功發送 API 請求,因為我們有基於令牌的身份驗證(用於身份驗證的自定義標頭)用於少數方法。

我試圖找出相同的示例代碼/資源,但運氣不佳。 如果有人在他們的應用程序中實現/遇到類似的事情,請告訴我。

我前段時間遇到了同樣的問題,並在博客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,你會發現這個文件已被下載,它將正確設置授權標題。

您需要設置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 ,你應該能夠適應這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM