Error CORS de Access-Control-Allow-Headers con API tras actualizar Discourse

Actualicé Discourse ayer y ahora recibo todos los callbacks de la API con error. He descubierto que el problema está en los encabezados de autenticación (1), pero al probar con algunas llamadas obtengo este error:

Acceso a XMLHttpRequest en 'https://mydomain.com/notifications.json?username=admin' desde el origen 'https://mydomain.com' bloqueado por la política CORS: El campo de encabezado de solicitud api-username no está permitido por Access-Control-Allow-Headers en la respuesta preflight.

Estoy usando Vue y he añadido la api-key y el api-username a los encabezados de la siguiente manera:

Vue.http
        .get(
             "https://discourse.mydomain.com/notifications.json?username="+input.username,
          {
            headers: {
             "Api-Key":"xxxxxxxxxxxxxxxxx",
             "Api-Username": "system",
              "content-type": "application/json",
              accept: "application/json"
            }
          }
        )

(1) Discourse REST API Documentation

¿Es posible que necesites configurar CORS en la configuración de tu sitio?

Sí, he agregado el dominio donde llamo a la API en la configuración de Discourse, pero ese error sobre el campo api-username no sé cuándo debo resolverlo.

¿Estás poniendo tu clave de API de system en el código del lado del cliente? :scream:
Esto significa que cualquiera puede tomarla de tu código JavaScript y usarla para controlar completamente tu foro.

Cualquier solicitud HTTP Ajax a Discourse debería aprovechar una sesión existente o no necesitar una sesión en absoluto.

3 Me gusta

No es solo una prueba, estoy usando el nombre de usuario

      Vue.http
    .get(
      "https://discourse.mydomain.com/notifications.json?username="+input.username,
      {
        headers: {
       "Api-Key":"xxxxxxxxxxxxxxxxxxxxxx",
        "Api-Username": input.username    
        }
      }
    )

Pero estoy obteniendo el mismo error con CORS y el campo api-username.

1 me gusta

Déjame repetir lo que dije:

Eso significa: ningún encabezado de autenticación. En absoluto.

1 me gusta

Realmente no deberías usar estas credenciales de API para solicitudes CORS, por lo que ese campo de encabezado no está permitido.

Sin embargo, sí permitimos los encabezados de user-api en CORS:

3 Me gusta

He leído la especificación de las claves de API de usuario

En mi caso, tengo SSO con una aplicación frontend en JavaScript. ¿Podría consumir la API sin usar la interfaz de autorización para cada usuario? Me gustaría una forma de usar el api-username… ¿es eso posible?

Saludos

¿Podrías resolver esto?
¡Gracias!

Al final, volví a la versión anterior de Discourse para no tener que cambiar toda la integración de la API.