2015-05-13 18 views
5

może ktoś wie, w jaki sposób mogę zintegrować podstawowe uwierzytelnianie z dokumentacją interfejsu API swashbuckle?http auth auth z dokumentacją api swashbuckle

widziałem, że tam funkcję basicauth w pliku swaggerconfig:

c.BasicAuth("basic").Description("Basic HTTP Authentication"); 

co zrobiłem:

  • Odkomentowano poprzednią linię, ale nic się nie zmieniło!

czy ktoś ma jakiś pomysł, co przegapiłem?

Dzięki!

Odpowiedz

6

Oto jak zrobiłem httpbasic uwierzytelniania:

public class AddAuthorizationHeaderParameterOperationFilter: IOperationFilter 
{ 
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) 
    { 
     var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline(); 
     var isAuthorized = filterPipeline 
             .Select(filterInfo => filterInfo.Instance) 
             .Any(filter => filter is IAuthorizationFilter); 

     var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any(); 

     if (isAuthorized && !allowAnonymous) 
     { 
      operation.parameters.Add(new Parameter { 
       name = "Authorization", 
       @in = "header", 
       description = "access token", 
       required = true, 
       type = "string"      
      }); 
     } 
    } 
} 

API jest użytkownik wpisuje się w wartości pola: podstawowego [un: PW] .tobase64.

Referencje: swashbuckle's issue 326 swashbuckle issue 2

+0

Uzyskiwanie błąd dla Systemu .Web.Http 4.0.0 nie można załadować. Korzystanie z frameworku 4.6.1. Każda pomoc –

5

Niewielka poprawa na najbardziej doskonałą odpowiedź @MarwaAhmad „s, jest sprawdzenie parametrów zerowych (np prosty GET lub zadzwoń ze wszystkimi params w adresie URL). Dodano również szczegóły dotyczące Basic Auth.

Ponadto, jeśli już używać globalnego IAuthorizationFilter do powiedzenia egzekwowania HTTPS, a następnie będziemy chcieli zmienić bardziej ogólne

filter => filter is IAuthorizationFilter 

do konkretnego

filter => filter is AuthorizeAttribute 
public class AddAuthorizationHeaderParameterOperationFilter : IOperationFilter 
    { 
     public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription) 
     { 
      var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline(); 
      var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Instance) 
       .Any(filter => filter is IAuthorizationFilter); 

      var allowAnonymous = 
       apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any(); 

      if (isAuthorized && !allowAnonymous) 
      { 
       if (operation.parameters == null) 
        operation.parameters = new List<Parameter>(); 

       operation.parameters?.Add(new Parameter 
       { 
        name = "Authorization", 
        @in = "header", 
        description = "Basic HTTP Base64 encoded Header Authorization", 
        required = true, 
        type = "string" 
       }); 
      } 
     } 
    } 
+0

Błąd pobierania pliku System.Web.Http 4.0.0 nie jest możliwy. Korzystanie z frameworku 4.6.1. Jakaś pomoc –