2015-10-16 47 views
7

因此,我開始使用Swagger。 我非常喜歡它的功能,但是我對所有方法的可用性有一些懷疑。使用Swashbuckle和ASP.NET Identity限制對Swagger中某些API控制器的訪問

據我所知 - 所有包含在Swaschbuclke「auth」方法中的實際上都是關於API本身,但我並不需要幫助 - 我的所有API都受API id /密鑰對的保護。

我想以某種方式利用ASP.NET身份(登錄系統)來限制對API頁面(/ swagger/ui/index)的訪問。

有什麼辦法嗎? Swaschbuckle中的任何方法?任何路線/身份黑客?

任何幫助表示讚賞。

編輯1:[ApiExplorerSettings(IgnoreApi = true)]屬性不是我正在尋找的 - 它限制了所有對方法的訪問,而不管身份。

回答

13

關於限制你的招搖文檔中個體的API曝光:

Swashbuckle 5.x的:

Swashbuckle 5.x中有一個名爲IgnoreObsoleteActions(你需要設置一個配置選項;它不是」 t默認啓用),如果它們具有[Obsolete]屬性,將隱藏動作。

舉例:配置documentation可用

httpConfiguration 
    .EnableSwagger(c => 
     { 
      c.IgnoreObsoleteActions(); 
     }); 

更多信息。

Swashbuckle 4.1.x版(或者,如果你不希望使用過時的屬性):

Swashbuckle建立在IApiExplorer頂部招搖文檔。您應該能夠添加屬性 - 管理ApiExplorerSettings控制器類或單個控制器方法,以便在生成文檔時使瀏覽器(以及隨後的Swashbuckle)忽略它們。

實施例:個別動作

實施例:控制器類

/// Ignore every controller method in FooBarController in documentation 
[ApiExplorerSettings(IgnoreApi = true)] 
public class FooBarController 
{ 
    public Bar GetFoo 
    { 
     ... 
    } 

    public Bar GetBar 
    { 
     ... 
    } 
} 

更多細節在此GitHub Issue。我已經在Swashbuckle 4.1.x中使用了這個。

+0

你好。 我真的很感謝迴應。 但是,不幸的是,[ApiExplorerSettings(IgnoreApi = true)]隱藏了所有用戶的api,沒有他在實際站點上的身份/角色/身份驗證狀態(和AspUser) –

+1

謝謝你的回答!很棒。 – jfl

+0

它工作的很好 - 很好地隱藏了我通常爲小測試創建的一些端點。 –

1

在項目根目錄中創建了名爲「swagger」的新文件夾。該文件夾名稱應該匹配url到swagger文檔。

在新創建的文件夾中添加新的Web.config文件。

<configuration> 
<system.web> 
<authorization> 
<deny users="?" /> 
</authorization> 
</system.web> 
<system.webServer> 
<modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 
</configuration> 

回答找到了here

另一種選擇將是:

「關我的頭頂,我會說DelegatingHandler是什麼您這裏需要。」

回答找到了here

相關問題