2015-10-16 12 views
7

Zacząłem więc używać Swagger. Jestem absolutnie zakochany w jego funkcjach, ale mam pewne wątpliwości co do dostępności wszystkich metod publicznych.Ogranicz dostęp do niektórych kontrolerów API w Swagger przy użyciu Swashbuckle i ASP.NET Identity

O ile zrozumiałem - wszystkie zawarte w Swaschbuclke metody "auth" dotyczą w rzeczywistości samych interfejsów API, ale nie potrzebuję pomocy - wszystkie moje interfejsy API są chronione przez parę identyfikatorów API/kluczy.

Chciałbym jakoś wykorzystać ASP.NET Identity (system logowania), aby ograniczyć dostęp do strony API (/ swagger/ui/index).

Czy jest jakiś sposób? Jakieś metody w Swaschbuckle? Wszelkie hacki/identyfikatory?

Każda pomoc jest doceniana.

Edytuj 1: [ApiExplorerSettings(IgnoreApi = true)] atrybut nie jest tym, czego szukam - ogranicza dostęp do metod, niezależnie od tożsamości.

Odpowiedz

13

chodzi o ograniczanie narażenia poszczególnych interfejsów API w swojej dokumentacji Swagger:

Swashbuckle 5.x:

Swashbuckle 5.x posiada opcję konfiguracji nazywa IgnoreObsoleteActions (które trzeba ustawić, to isn” t włączone domyślnie), które ukryją akcje, jeśli mają atrybut [Obsolete].

Przykład: Konfiguracja

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

Więcej informacji dostępnych w documentation.

Swashbuckle 4.1.x (lub jeśli nie chcesz korzystać z przestarzałych atrybut):

Swashbuckle buduje dokumentacji Swagger na szczycie IApiExplorer. Powinieneś być w stanie dodać atrybut - [ApiExplorerSettings(IgnoreApi = true)] - aby zarządzać ApiExplorerSettings klasą kontrolera lub poszczególnymi metodami kontrolera, aby explorer (a następnie Swashbuckle) zignorował je podczas generowania dokumentacji.

Przykład: Indywidualne działania

Przykład: zajęcia Controller

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

    public Bar GetBar 
    { 
     ... 
    } 
} 

Więcej szczegółów w tej GitHub Issue. Użyłem tego sam w Swashbuckle 4.1.x.

+0

Witam. Naprawdę doceniam odpowiedź. Ale, niestety, [ApiExplorerSettings (IgnoreApi = true)] ukrywa api od wszystkich użytkowników, bez jego tożsamości/ról/auth status na rzeczywistej stronie (i AspUser) –

+1

Dziękuję za tę odpowiedź! Działa świetnie. – jfl

+0

To działa świetnie - miło jest ukryć niektóre punkty końcowe, które zwykle tworzę dla małych testów. –

1

Utworzono nowy folder o nazwie "swagger" w katalogu głównym projektu. Nazwa folderu powinna być zgodna z adresem URL i dokumentacją przechwytującą.

Dodano nowy plik Web.config w nowo utworzonym folderze.

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

odpowiedź znaleziona here.

Innym rozwiązaniem będzie:

„Off górze głowie powiedziałbym DelegatingHandler co trzeba tutaj.”

odpowiedź znaleziona here.

Powiązane problemy