Autenticación personalizada en el conector de datos personalizado

Un usuario Pregunto ✅

nzimmerman

Intentar crear un conector de datos personalizado para un sitio web que utiliza un flujo de autenticación que no encaja perfectamente con las opciones predeterminadas.

El flujo de autenticación es así:

1. envíe una solicitud GET a https://www.example.com/api/authenticate?username=»joesmith»&password=»abcd1234 «

Esto devuelve un token de autenticación codificado json, que puedo codificar en base 64 y pasar en los encabezados de una llamada Web.Contents

2. llame a cualquier otro punto final de API con autenticación básica utilizando el nombre de usuario y el token de autenticación proporcionados

Fuente = Json.Document(Web.Contents(https://www.example.com/api/products?skip=0, [Headers=[Accept=»application/json», Authorization=»Basic » & AuthorizationToken]]))

Esto funciona bien en una consulta normal.

Simplemente configuramos la autenticación en Anónimo y el código duro en el nombre de usuario y la contraseña.

Pero eso no funcionará para un conector de datos personalizado.

En el conector de datos personalizado, si configuro la autenticación en UsernamePassword, falla porque el sitio web no usa la autenticación básica para generar el token de autenticación.

Si configuro la autenticación en Anónimo, no tengo el nombre de usuario y la contraseña que necesito para generar el token de autenticación.

Pasé una buena cantidad de tiempo buscando y todavía tengo que encontrar una forma de generar un mensaje de credencial personalizado que me permita acceder a los campos de nombre de usuario/contraseña de Extension.CurrentCredential().

Tampoco he visto una forma de atrapar el error de autenticación, lo que me permitiría manejar la autenticación por mi cuenta.

Para este último, intenté agregar ManualStatusHandling = {401} a la llamada Web.Contents.

Sin embargo, no parece quedar atrapado. (no parece que verifique el resultado de un campo de error en el json).

Tal vez lo estoy haciendo incorrectamente.

También intenté configurar la autenticación en UsernamePassword y pasar ManualCredentials = true a Web.Contents, con la esperanza de poder obtener el nombre de usuario y la contraseña y realizar la autenticación manualmente.

Sin embargo, parece que la extensión intenta validar las credenciales en el sitio web a través de la autenticación básica antes de ejecutar la llamada Web.Contents.

Si me equivoco acerca de estas sugerencias sobre cómo hacer la llamada correctamente, sería apreciada.

¿Algunas ideas?

Gracias,

Ned

pierregeraud

hola, me pasa lo mismo, encontraste alguna solucion o forma de hacerlo funcionar?

nzimmerman

En respuesta a pierregeraud

No Desafortunadamente.

Tengo la intuición de que algo puede ser posible usando WebAction.Request.

Pero por lo que puedo decir, esto solo funcionará cuando se implemente desde un conector en VS.

No creo que pueda probarlo haciendo una consulta directa desde Power BI.

Simplemente no he tenido tiempo de volver atrás y hackearlo de nuevo.

La mejor de las suertes para ti.

Hola @nzimmerman,

Quizás puedas referirte a esto.

Autenticación con una fuente de datos

Atentamente,
Lionel Chen

Si esta publicación ayuda, entonces por favor considere Acéptalo como la solución. para ayudar a los otros miembros a encontrarlo más rápidamente.

nzimmerman

En respuesta a v-lionel-msft

Hola Lionel,

desafortunadamente esto no hace nada para mí.

Estoy intentando crear el conector de datos personalizado en Visual Studio, no acceder a los datos a través de un conector de datos existente.

Como mencioné en mi publicación original, puedo obtener acceso a los datos que ya están en Power BI/Excel, pero para hacerlo debo usar autenticación anónima y código duro en el nombre de usuario y la contraseña. Esto no es portátil ni seguro cuando se extiende a otros usuarios.

Lo que necesito poder hacer es capturar el nombre de usuario y la contraseña ingresados ​​para las credenciales de autenticación básica y luego pasarlos a través de un procedimiento de autenticación personalizado en el conector que estoy creando.

Si bien he visto varias formas de hacer esto a través de la autenticación OAuth, esa no es una opción en mi caso.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *