Error de AzureAD AADSTS7500525 usando el plugin SAML

Hola!!

Teníamos el plugin SAML funcionando con nuestro AzureAD, pero ayer, después de actualizar al último commit, comenzamos a ver los siguientes errores cuando los usuarios intentan autenticarse a través de SAML:

Sign in
Sorry, but we’re having trouble signing you in.

AADSTS7500525: There was an XML error in the SAML message at line 1, position 1. Verify that the XML content of the SAML messages conforms to the SAML protocol specifications.

Este enlace Azure AD SAML2 request rejected: AADSTS7500525 - Microsoft Q&A sugiere que esto puede ser causado por “Compressed SAML Authentication Requests” que AzureAD no soporta.

Los commits de diciembre tienen muchos cambios en SAML (configuración a través de la configuración del sitio, por ejemplo), pero no pude averiguar si hubo algún cambio relacionado con las solicitudes SAML que pudiera haber causado esto.

Configuración SAML (funcionando bien hasta la actualización):

## Saml plugin setting
  DISCOURSE_SAML_TARGET_URL: https://login.microsoftonline.com/<<nuestro id de aplicación>>/saml2
  DISCOURSE_SAML_CERT_FINGERPRINT: "<<nuestra huella digital>>"
  DISCOURSE_SAML_REQUEST_METHOD: POST
  #DISCOURSE_SAML_FULL_SCREEN_LOGIN: true
  DISCOURSE_SAML_CERT: "-----BEGIN CERTIFICATE-----
<<Nuestra carga útil del certificado>>
-----END CERTIFICATE-----"
  DISCOURSE_SAML_SYNC_GROUPS: true
  DISCOURSE_SAML_GROUPS_ATTRIBUTE: http://schemas.microsoft.com/ws/2008/06/identity/claims/role
  DISCOURSE_SAML_GROUPS_FULLSYNC: true

¿Cómo puedo habilitar la depuración de autenticación para obtener más información sobre esto?

1 me gusta

¡Lamento escuchar que tienes problemas! Tienes razón en que he estado haciendo muchas refactorizaciones en el plugin SAML en las últimas semanas, así que podría estar relacionado.

¿Cuándo ocurre esto? ¿Cuando los usuarios inician sesión? ¿O cuando regresan a Discourse?

¿Sería posible que compartieras la URL de tu sitio aquí, o por mensaje privado?

1 me gusta

Esto ocurre cada vez que un usuario necesita iniciar sesión (la sesión expiró o un nuevo usuario intenta iniciar sesión).

Comenzó a ocurrir después de actualizar a la revisión 9334abe249 (antes estaba en la 959923d3cf).

Lo siento, pero nuestro foro está alojado internamente en una cuenta privada de AWS, por lo que no podrá acceder desde fuera de nuestra red.

¿Dónde aparece el error? ¿En los registros de Discourse? ¿En la pantalla del usuario? ¿En Azure?

¿Podrías compartir algunas capturas de pantalla?

1 me gusta

También intenté encontrar algo en los registros de Discourse, pero como el error ocurre del lado de Azure, no encontré ningún mensaje de error allí.

En production.log, el proceso de inicio de sesión se detiene aquí (probablemente esperando una respuesta de Azure):

Processing by StaticController#show as HTML
Parameters: {“id”=>“login”}
Rendered static/login.html.erb (Duration: 17.5ms | Allocations: 1440)
Completed 200 OK in 19ms (Views: 18.3ms | ActiveRecord: 0.0ms | Allocations: 2104)
Started GET “/session/csrf” for <> at 2021-12-14 18:28:16 -0300
Processing by SessionController#csrf as JSON
Completed 200 OK in 1ms (Views: 0.1ms | ActiveRecord: 0.0ms | Allocations: 337)
Started POST “/auth/saml” for <> at 2021-12-14 18:28:16 -0300
(saml) Setup endpoint detected, running now.
(saml) Request phase initiated.

El equipo responsable de Azure está intentando obtener el XML que están recibiendo, así que tal vez podamos ver algo “diferente” en él. Te avisaré cuando me lo envíen.

1 me gusta

El error ocurre después de que el usuario hace clic en el botón de inicio de sesión.
Luego se redirige a la página de inicio de sesión de Azure con el siguiente error:

Me temo que es difícil averiguar qué está pasando aquí sin acceso al sitio.

El siguiente paso sería intentar obtener el XML que está recibiendo Azure y averiguar qué está mal con él. Deberías poder hacerlo revisando la carga útil en las herramientas de desarrollador del navegador y luego decodificándola usando una herramienta como esta.

2 Me gusta

Genial.
El retorno de la solicitud es un código http 400:

Request URL: https://login.microsoftonline.com/APP_ID/saml2
Request method: POST
Status code: 400 Bad Request
Remote address: 20.190.173.144:443
Referrer policy: strict-origin-when-cross-origin

El SAMLRequest inflado es (algunos IDs ocultos por privacidad):

<samlp:AuthnRequest AssertionConsumerServiceURL='https://INTERNAL_URL/auth/saml/callback' Destination='https://login.microsoftonline.com/APP_ID/saml2' ID='_11111111-1111-1111-1111-111111111111' IssueInstant='2021-12-14T22:33:29Z' Version='2.0' xmlns:saml='urn:oasis:names:tc:SAML:2.0:assertion' xmlns:samlp='urn:oasis:names:tc:SAML:2.0:protocol'> <saml:Issuer>https://INTERNAL_URL</saml:Issuer> </samlp:AuthnRequest>

Una cosa que he notado al comparar mi solicitud con el ejemplo en Single sign-on SAML protocol - Microsoft identity platform | Microsoft Learn es que en mi AuthnRequest no tenemos el parámetro

xmlns="urn:oasis:names:tc:SAML:2.0:metadata"

Parece que mi refactorización reciente agregó inadvertidamente compresión para el enlace POST de SAML. He revertido ese cambio de comportamiento en FIX: Do not compress SAML request for POST binding (#55) · discourse/discourse-saml@792a51c · GitHub

¿Puedes intentar actualizar el plugin SAML y luego ver si las cosas funcionan mejor?

4 Me gusta

Hola David,

Después de actualizar a FIX: Do not compress SAML request for POST binding (#55) · discourse/discourse-saml@792a51c · GitHub, la autenticación SAML ha vuelto a la normalidad aquí.

¡Gracias por la ayuda y por todo el trabajo en el plugin!

1 me gusta

Este tema se cerró automáticamente después de 20 horas. Ya no se permiten nuevas respuestas.