2015-05-13 7 views
5

qualcuno potrebbe sapere come posso integrare l'autenticazione di base con la documentazione di swashbuckle api?http basic auth con swashbuckle documentazione api

ho visto che c'è una funzione BasicAuth nel file swaggerconfig:

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

quello che ho fatto:

  • commentata la linea precedente, ma nulla è cambiato!

qualcuno ha qualche idea di cosa mi sono perso?

Grazie!

risposta

6

Ecco come ho fatto l'autenticazione httpbasic:

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"      
      }); 
     } 
    } 
} 

utente del api scriverà nel valore del campo: di base [ONU: pw] .tobase64.

Riferimenti: swashbuckle's issue 326 swashbuckle issue 2

+0

Ottenere errore per il sistema .Web.Http 4.0.0 non è in grado di caricare. Utilizzo del framework 4.6.1. Qualsiasi aiuto –

5

Un miglioramento minore sulla risposta più eccellente @MarwaAhmad s', è per controllare i parametri nulli (ad esempio un semplice GET o chiama con tutti i parametri in URL). Inoltre ha aggiunto i dettagli per l'autenticazione di base.

Inoltre, se si utilizza già una globale IAuthorizationFilter per dire far rispettare HTTPS, allora si dovrà cambiare il più generale

filter => filter is IAuthorizationFilter 

ad una specifica

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

Errore in System.Web.Http 4.0.0 non riuscito a caricare. Utilizzo del framework 4.6.1. Qualsiasi aiuto –