[Bug] Interactive auth callback hangs forever when an idle connection reaches AuthCodeReceiver first
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- authentication, backend
Línea de trabajo
Start by reading AuthCodeReceiver and its use of HttpServer; the issue identifies synchronous request handling and a connection accepted before the OAuth POST as the suspected path. Reproduce the flow with an idle connection reaching the listener first, then check that the real OAuth POST is processed and az login completes. The issue does not name a test file.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Describe the bug
When I run az login in my VS code terminal (using the VS Code SSH extension to connect to my Linux VM), it either succeeds, or it hangs forever after I log in via the browser until I close the browser and cancel the command. If I retry a couple of times, sometimes 1 succeeds. (Sometimes I spam 10x and it'll work once - fairly annoying).
To Reproduce
Steps to reproduce the behavior:
- Use the VS Code SSH extension to connect to a Linux VM
- az login on the VM (not with device code, this is using interactive auth via the browser)
- Login using the browser
- Login either works fine, or hangs forever
Expected behavior
The normal flow, looking at the code-
- az cli asks MSAL to perform interactive auth
- MSAL creates a temp HTTP server on a port and registers a redirect URI
- az cli opens the entra login auth page in the browser
- after auth, entra should be returning an HTML form that the browser POSTs to the redirect URI
- VS Code remote SSH forwards the local connection to that port on the Linux machine
- MSAL reads the auth code from the POST and does the token exchange
TLDR: the local browser should POST to the localhost port on the VS code tunnel, then to the MSAL HTTP server, before returning the auth code to az cli.
What you see instead
- MSAL was listening on the redirect port, ex. 39397
- An idle TCP connection arrives from a different ephemeral source port (this could really be from anything, but I'm guessing it has to do with the VS code remote SSH behavior - I think it shouldn't matter, though).
- MSAL accepted that connection
- It was an empty connection - no requests arrive
- The real OAuth POST arrives from a different port
- The real OAuth POST sits in the server's request queue forever
Accepted idle connection:
127.0.0.1:39397 <-> 127.0.0.1:40890
Recv-Q: 0
Queued real callback:
127.0.0.1:39397 <-> 127.0.0.1:40902
Recv-Q: 3026
The MSAL Python version you are using
- Azure CLI: 2.89.0
- MSAL Python: 1.36.0
- Also present in MSAL Python 1.37.0 source
- Python: Azure CLI bundled Python 3.14
- OS: Ubuntu 22.04
- Client: VS Code Remote SSH with a Windows browser
Additional context
I think this is a race condition and if the OAuth connection reaches the listening port first, everything works fine.
A few things I noticed:
- AuthCodeReceiver is using HttpServer, which I think is singled threaded. I can't find the GitHub link, but looking at the handler in Python source it looks like we process the request synchronously and don't accept another connection until the handler is done
self._server.timeout = timeoutin AuthCodeReceiver is for accepting new requests, but this hang should be happening after the initial accept - we're just waiting for the request bytes
- Lenguaje dominante
- Python
- Estrellas
- 971
- Forks
- 223
- Merge medio
- 3 h 6 min
- PR fusionados (30 d)
- 4
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de AzureAD/microsoft-authentication-library-for-python
-
AzureSDK bug P1
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
-
http_client docstring does not say that timeout, verify and proxies only configure the default sessionPosiblemente ocupada @HardMax71 la tomó hace 37 días. Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 25/100
-
[Bug] The built-in retry never retries the token POST: HTTPAdapter(max_retries=1) keeps urllib3's default allowed_methodsPosiblemente ocupada @HardMax71 la tomó hace 44 días. Abiertobug untriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 35/100
AzureAD/microsoft-authentication-library-for-python#957 · 3 comentarios ·
-
public-client untriaged
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
-
needs attention public-client Similar-Issue untriaged
Dificultad 4/5 3-5 días Aptitud para principiantes 43/100
AzureAD/microsoft-authentication-library-for-python#908 · 3 comentarios ·
Todos los issues de AzureAD/microsoft-authentication-library-for-python
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
[Bug] to_ical lexicographical/default sorting moves URL property between two X-WR- propertiesAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
collective/icalendar#1968 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Deferred from #1869: Complete the companion pytest guardrail update noted in the PR description...Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 95/100
Los mantenedores suelen responder en 1 día
-
Custom provider API keys collide on one host: env slot keyed on host:port only, not URL pathAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
NousResearch/hermes-agent#140958 ·
Los mantenedores suelen responder en 1 día
-
Bug triage/confirmed
Dificultad 2/5 Medio día Aptitud para principiantes 85/100
agentscope-ai/agentscope#3355 ·
Los mantenedores suelen responder en 2 días