securitydefinitions que example bearer swagger swagger-ui swashbuckle

que - swagger token authentication



Habilitar el token de portador en Swashbuckle(documento Swagger) (1)

Actualizar

El problema detallado a continuación ahora se resuelve en Swashbuckle v5.5.0 .

Problema

Sólo se encontró con el mismo problema exacto. Creo que la causa raíz es esta línea en el código fuente de Swashbuckle :

var key = encodeURIComponent($(''#input_apiKey'')[0].value);

Aquí es donde el valor del campo de entrada HTML pasa a través de la codificación de URL y convierte el espacio en %20 . Estoy planeando abrir un problema en el repositorio de Swashbuckle en GitHub .

Solución

Hasta que se resuelva el problema, aquí hay una solución alternativa que consiste en reemplazar la línea anterior usando un archivo Javascript inyectado en la interfaz de usuario de Swagger:

  1. En el proyecto donde tienes instalado Swashbuckle, crea una nueva carpeta y llámala "Swagger" .

  2. En la nueva carpeta, cree un nuevo archivo Javascript llamado "SwaggerUiCustomization.js" y coloque este script en él:

    (function () { function addApiKeyAuthorization() { var key = $(''#input_apiKey'')[0].value; if (key && key.trim() != "") { var apiKeyAuth = new SwaggerClient.ApiKeyAuthorization(swashbuckleConfig.apiKeyName, key, swashbuckleConfig.apiKeyIn); window.swaggerUi.api.clientAuthorizations.add("api_key", apiKeyAuth); log("added key " + key); } } $(''#input_apiKey'').change(addApiKeyAuthorization); })();

  3. En el Explorador de soluciones, elija el archivo y presione Alt + Intro para editar sus propiedades . En la ventana Propiedades , cambie la Acción de compilación del archivo a Recurso incrustado .

  4. En su archivo SwaggerConfig.cs agregue la siguiente línea dentro del bloque de código EnableSwaggerUi() : c.InjectJavaScript(thisAssembly, "<Project_Default_Namespace>.Swagger.SwaggerUiCustomization.js");
    Asegúrese, por supuesto, de reemplazar <Project_Default_Namespace> con el espacio de nombres predeterminado de su proyecto.

  5. Ejecute su proyecto y escriba "Portador" en el cuadro de texto. Cuando invoca una acción de controlador, debe obtener exactamente el mismo valor, con un espacio en blanco en lugar de %20% , en el lado del servidor.

Creé una aplicación webapi de asp.net que utiliza Seguridad de Cuenta Individual para que el token de Portador esté habilitado de forma predeterminada. Está funcionando bien, así que puedo probarlos en Postman sin problemas.

Aquí viene la pregunta cuando estoy tratando de integrar la interfaz de usuario Swagger por Swashbuckle. Instalé el Swashbuckle por:

Instalar el paquete Swashbuckle

Luego cambia el SwaggerConfig.cs :

GlobalConfiguration.Configuration .EnableSwagger(c => { c.ApiKey("Token") .Description("Filling bearer token here") .Name("Authorization") .In("header"); } .EnableSwaggerUi(c => { c.EnableApiKeySupport("Authorization", "header"); };

Iniciar mi aplicación y completar el token del Portador:

Pero no funciona cuando ejecuto la solicitud de API que necesita autorización. Aquí está la captura de pantalla:

El token del portador se agrega a la Autorización en el encabezado. Pero todavía tengo el error 401. Me pregunto si es porque el token está codificado (el ESPACIO se reemplaza por% 20). ¿Alguna idea? Gracias.

Por cierto, también me pregunto cómo agregar el / token en mi documento Swagger para poder obtener el token en la interfaz de usuario de Swagger.