Dans asp.net framework Web API, j'ai pu ajouter le Bearer token sur l'interface utilisateur et le faire fonctionner correctement de deux manières différentes.
Voie 1 :
Ajout d'une opération fitler. Créez la classe suivante :
public class AuthorizationHeaderParameterOperationFilter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null)
{
operation.parameters = new List<Parameter>();
}
operation.parameters.Add(new Parameter
{
name = "Authorization",
@in = "header",
description = "access token",
required = false,
type = "string",
@default = "Bearer "
});
}
}
et maintenant dans le SwaggerConfig.cs ajouter le suivant :
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
// other settings
c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
})
.EnableSwaggerUi(c =>
{
// UI configurations
});
Voie 2 :
Nous pouvons aussi utiliser le DocumentFilter pour itérer toutes les opérations et ajouter l'en-tête, dans la suivante nous sautons l'opération qui prend le nom d'utilisateur et le mot de passe et donne le jeton pour la première fois :
public class SwaggerPathDescriptionFilter : IDocumentFilter
{
private string tokenUrlRoute = "Auth";
// the above is the action which returns token against valid credentials
private Dictionary<HeaderType, Parameter> headerDictionary;
private enum HeaderType { TokenAuth };
public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
{
CreateHeadersDict();
var allOtherPaths = swaggerDoc.paths.Where(entry => !entry.Key.Contains(tokenUrlRoute)) //get the other paths which expose API resources and require token auth
.Select(entry => entry.Value)
.ToList();
foreach (var path in allOtherPaths)
{
AddHeadersToPath(path, HeaderType.TokenAuth);
}
}
/// <summary>
/// Adds the desired header descriptions to the path's parameter list
/// </summary>
private void AddHeadersToPath(PathItem path, params HeaderType[] headerTypes)
{
if (path.parameters != null)
{
path.parameters.Clear();
}
else
{
path.parameters = new List<Parameter>();
}
foreach (var type in headerTypes)
{
path.parameters.Add(headerDictionary[type]);
}
}
/// <summary>
/// Creates a dictionary containin all header descriptions
/// </summary>
private void CreateHeadersDict()
{
headerDictionary = new Dictionary<HeaderType, Parameter>();
headerDictionary.Add(HeaderType.TokenAuth, new Parameter() //token auth header
{
name = "Authorization",
@in = "header",
type = "string",
description = "Token Auth.",
required = true,
@default = "Bearer "
});
}
}
et ensuite nous avons besoin de le regiter dans le SwaggerConfig.cs :
GlobalConfiguration.Configuration
.EnableSwagger(c =>
{
// other settings
c.DocumentFilter<SwaggerPathDescriptionFilter>();
})
.EnableSwaggerUi(c =>
{
// UI configurations
});
Maintenant, nous verrons l'entrée Token pour les en-têtes dans l'interface utilisateur swagger comme :
0 votes
J'ai confirmé que l'ESPACE codé (%20) en est la cause. Mais comment puis-je remplacer le %20 par un ESPACE ?
1 votes
Curieux : Où est la méthode
EnableApiKeySupport()
défini ? J'utilise la dernière version de Swashbuckle (v5.4.0) et je ne la vois pas... ?0 votes
Je l'ai trouvé. C'est une méthode de
SwaggeruiConfig
et doit être défini dansc.EnableSwaggerUi()
.