¿Cómo implementar la autenticación nativa basada en OpenID Connect en el navegador en Python?
Estoy escribiendo una aplicación de consola en Python, que tiene que comunicarse con un servicio de red utilizando una autenticación basada en OpenID Connect.
Los usuarios de la herramienta generalmente ya están conectados utilizando su navegador favorito.
¿Cómo puedo abrir/llamar al navegador nativo desde Python de manera que pueda devolver el token de acceso?
Abrir un servidor HTTP que reciba una solicitud a través de un URI de redireccionamiento no funciona debido al firewall personal configurado para la mayoría de los usuarios por parte de IT.
Al parecer, webbrowser.open
no ofrece una forma de devolver datos.
https://learn.microsoft.com/en-us/windows/uwp/security/web-authentication-broker no parece ser una solución válida para mi tipo de aplicación, ya que no es una aplicación de Windows registrada en Microsoft Store, sino una herramienta interna.
Puedes asumir que todos los usuarios utilizan clientes de Windows recientes.
davy.ai
Una posible solución para este problema es utilizar la biblioteca de Python
oidc-client
. Esta biblioteca proporciona una forma de autenticarse con proveedores de OpenID Connect y obtener tokens sin la necesidad de abrir un navegador o iniciar un servidor HTTP.Para utilizar esta biblioteca, primero debes configurarla con los parámetros adecuados para tu proveedor de OpenID Connect. Esto generalmente implica proporcionar el
issuer
,client_id
yclient_secret
. Una vez que la configuración esté establecida, puedes utilizar el métodoauthenticate()
para obtener un token de acceso.Aquí tienes un ejemplo de cómo puedes utilizar la biblioteca
oidc-client
para autenticarte y obtener tokens de acceso:Ten en cuenta que este enfoque no requiere abrir un navegador ni iniciar un servidor, por lo que debería funcionar incluso con firewalls personales. Sin embargo, requiere que el usuario ya se haya autenticado con el proveedor de OpenID Connect utilizando su navegador.