2017-03-02 52 views
5

Używam SwashBuckle do dokumentacji kontrolerów WebAPI. Używam również OAuth2 z przepływem poświadczeń klienta. Aby autoryzować, muszę przekazać client_id i client_secret.Autoryzacja Swashbuckle OAuth2 z przepływem poświadczeń klienta

Mam następujący kod:

config.EnableSwagger(c => { 
    c.SingleApiVersion("v1", "My API"); 
    c.OAuth2("oauth2") 
     .Flow("application") 
     .TokenUrl("/oauth2/token"); 
    c.OperationFilter<AssignOAuthSecurityRequirements>(); 
}) 
.EnableSwaggerUi(c => { 
    c.EnableOAuth2Support(clientId: "clientIdValue", clientSecret:"clientSecretValue", "", ""); 
    c.CustomAsset("index", Assembly.GetExecutingAssembly(), "WebAPI.Swagger.UI.index.html"); 
}); 

Autoryzacja działa dobrze, ale moje wartości client_id i client_secret są sztywno (clientIdValue, clientSecretValue). Jak mogę dodać możliwość wprowadzania wartości przez użytkownika w tym oknie dialogowym? Czy ktoś może mi pomóc?

enter image description here

Proszę dać mi znać, jeśli muszę pisać kod AssignOAuthSecurityRequirements też. Z góry dziękuję

+0

rozwiązałeś ten problem? szukam rozwiązania dla tego samego pytania. – jks

+0

Ditto, jestem również ciekawy, w jaki sposób mogę uzyskać okno dialogowe, w którym konsument może wprowadzić swoje id_klienta i client_secret w celu uwierzytelnienia. Czy to możliwe w zachwycie? – Zoop

Odpowiedz

0

Nie wiem dokładnie, co poszło nie tak w twoim kodzie, może brak definicji zakresu.

Zrobiłem to z powodzeniem z ASP.NET Core i aktualnej wersji Swashbuckle.AspNetCore (https://github.com/domaindrivendev/Swashbuckle.AspNetCore)

Klient poświadczenia przepływ jest określany jako „aplikacji” tak, w pliku Startup.cs, trzeba skonfigurować Swagger następująco:

 services.AddSwaggerGen(c => { 

      //other configs... 

      c.AddSecurityDefinition("oauth2", new OAuth2Scheme { 
       Type = "oauth2", 
       Flow = "application", 
       TokenUrl = "<token_endpoint_url>", 
       Scopes = new Dictionary<string, string> 
       { 
        { "first-scope", "First scope description" }, 
        { "second-scope", "Second scope description" } 
        //define as many scopes as you want... 
       } 
      }); 
     }); 

parametr TokenUrl musi wskazywać ważnego OAuth 2.0 Reklamowe końcowego (kasa http://docs.identityserver.io/en/release/endpoints/token.html dla próbki o tym, jak powinni zachowywać punkt końcowy/wyglądać). W moich testach działały zarówno bezwzględne, jak i względne adresy URL.

Po tym, dialog zezwolenia powinien wyglądać jak poniżej:

Authorize popup

  • Należy pamiętać, że trzeba wybrać co najmniej jeden zakres przed przycisk autoryzacji faktycznie podnosi czegokolwiek (komponent OAuth powinny zmienić, aby dodać zastrzeżenie IMHO).

W sekcji SwaggerUI nie była wymagana żadna dodatkowa konfiguracja.