Zajmuję się tworzeniem aplikacji PhoneGap, która komunikuje się z bezpiecznym serwerem .net. Problem polega na tym, że nie mogę przekazywać żadnych plików cookie z jakimkolwiek wnioskiem (W3C).Nagłówek ciasteczka w PhoneGap: Odmówiono ustawiania niebezpiecznego nagłówka "Cookie"
To właśnie robię (zakładam, że działają "nazwa użytkownika" i "hasło").
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;
});
W tym momencie mam token uwierzytelniania, którego mogę używać do sprawdzania wszystkich kolejnych żądań. Więc za pomocą tokenu robię kolejne żądania do serwera ...
$.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 po prostu mówi: Odmowa ustawić niebezpieczny nagłówka „Cookie” (która przylega do specyfikacji W3C). Aplikacja nie ustawia nagłówka iw rezultacie żądanie 401, ponieważ plik cookie autoryzacji nie jest wysyłany.
Moje pytanie brzmi: czy istnieje sposób na obalenie tego i zastąpienie nagłówka pliku Cookie (lub w inny sposób obejścia go w całości) w PhoneGap? Wiem, że używanie nagłówka Authorization jest także opcją, ale mam ograniczony dostęp do serwera (który go nie obsługuje) i liczyłem na bardziej natychmiastowe rozwiązanie.
Pytanie dodatkowe: Wywołanie usługi AuthService powinno również ustawić plik cookie httpOnly na urządzeniu, ale nie działa (przypuszczam, że jest to spowodowane tym, że jest to żądanie międzydomenowe) ... Czy mam rację w tym założeniu lub coś jest nie tak po stronie serwera?
Dzięki!
Dzięki za odpowiedź. W końcu zdecydowałem się na nagłówek Authorization, który działa dobrze na moje potrzeby! – evancohen
Dziękuję, zmagałem się z nagłówkiem odpowiedzi 'Set-Cookie' z atrybutami' Secure' i 'httponly', a następnie wysłałem odpowiedni plik' Cookie' z prośbą o kontynuację. Używam pośrednika 'nginx' pośredniego i pozwoliło mi ustawić odpowiednie nagłówki' Access-Control', których wymagany jest Angular '$ http'. – sampoh