Sto sviluppando un'applicazione PhoneGap che comunica con un server .net sicuro. Il problema è che non riesco a passare nessun cookie con nessuna richiesta (W3C).Intestazione cookie in PhoneGap: rifiutato di impostare l'intestazione non sicura "Cookie"
Questo è quello che sto facendo (supponiamo che "username" e "password" funzionino).
var token;
$.ajax({
url: "https://server.com/AuthService/api/account/login",
crossDomain: true,
type: 'post',
async: false,
data: {
username: "username",
password: "password"
}
}).done(function(response) {
token = response.securityToken;
success = true;
});
A questo punto ho un token di autenticazione che posso utilizzare per convalidare tutte le richieste successive. Quindi, utilizzando quella pedina faccio un'altra richiesta al server ...
$.ajax({
url: "https://server.com/Service/api/search?query=" + query,
headers: { Cookie: 'auth=' + token },
crossDomain: true,
withCredentials: true,
type: 'POST',
async: false,
data: ' ' //because we don't want our request to be 0 bytes (the server is picky)
}).done(function(data) {
result = data;
});
Chrome dice solo: rifiutato di fissare pericoloso intestazione "Cookie" (che aderisce alla specifica W3C). L'app non imposta l'intestazione e di conseguenza la richiesta 401 perché il cookie di autorizzazione non viene inviato.
La mia domanda è questa: Esiste un modo per sovvertire questo e sovrascrivere l'intestazione del cookie (o un altro modo di procedere interamente) su PhoneGap? So che usare un'intestazione di autorizzazione è anche un'opzione, ma ho un accesso limitato al server (che non lo supporta) e speravo in una soluzione più immediata.
Domanda bonus: la chiamata a AuthService deve anche impostare un cookie httpOnly sul dispositivo, ma non lo fa (suppongo che si tratti di una richiesta interdominio) ... Sono corretto in questa ipotesi, o potrei c'è qualcosa di sbagliato sul lato server?
Grazie!
Grazie per la risposta. Ho finito per optare per un'intestazione di autorizzazione, che funziona bene per le mie esigenze! – evancohen
Grazie, stavo lottando con l'intestazione di risposta 'Set-Cookie' con gli attributi' Secure' e 'httponly', quindi inviando il' Cookie' giusto alle richieste di follow-up. Sto usando un proxy 'nginx' in mezzo e mi ha permesso di impostare le intestazioni' Access-Control' appropriate che Angular '$ http' richiedeva. – sampoh