Настройка cookie, когда запрашиваемый Ajax возвращается из другого домена - PullRequest
2 голосов
/ 16 января 2012

У меня есть мобильное веб-приложение, которое требует базовой аутентификации.Мне удалось вызвать базовую аутентификацию с помощью Ajax на сервере, который находится в другом домене.Однако у меня проблема с ответом.

Обычно идентификатор сеанса устанавливается в браузере ответом Ajax через заданный заголовок cookie.Я заметил, что это не произошло после успешной аутентификации.

Я пытался установить cookie вручную, читая заголовки при возврате ответа.Я добился этого с помощью объекта jQuerys jqxhr.К моему удивлению, даже несмотря на то, что сервер указал, что идентификатор сеанса был возвращен, я не смог увидеть какой-либо установленный заголовок cookie в ответе через jqxhr.

Является ли это ожидаемым поведением междоменного запроса?Что некоторые заголовки ответа будут удалены?Это функция безопасности браузера?Если это так, что бы вы предложили обойти это (например, вернуть идентификатор сеанса в теле, что я не хочу, потому что я использую фильтр безопасности Широ в резервном, чтобы позаботиться об этом, я нехотите взломать его)?

Пожалуйста, помогите

1 Ответ

0 голосов
/ 17 января 2012

Вы не можете использовать ajax для запроса междоменного URI. Вам нужно будет внедрить свой собственный прокси на стороне сервера, который будет обрабатывать запрос / ответ с удаленным сервером аутентификации. Он может просто скопировать / вставить ответ, но он должен находиться в том же домене, что и ваш клиент.

То же самое для куки, у них есть домен, в котором они могут быть прочитаны / записаны.

Вам будет разрешено запрашивать только этот прокси. Он также может обрабатывать процесс создания файла cookie и затем возвращать идентификатор файла cookie клиенту.

Для (очень простого) примера на www.auth.com у вас есть этот веб-сервис:

url : www.auth.com/auth
@params : string uuid, string password
@returns : int shiroSessionId // yes it's more complicated, but KISS for the example

Вы должны создать на www.mydomain.com/myAuth класс, который использует сервис www.auth.com/auth с теми же параметрами и создать локальный файл cookie сеанса

url : /myAuth
@params : string uuid, string password
@returns : int cookieId, -1 if login failed

И, наконец, на www.mydomain.com/login.html у вас будет следующий вызов js (здесь, в jquery):

$.ajax(function() {
  url : '/myAuth',
  date : {uuid: inputUuid, password: inputPassword}, // provided by a form
  success(cookieId) {
    if(cookieId > 0) {
      alert('logged with cookie '+getCookie(cookieId));
    } else {
      alert('login failed');
    }
  }
});

Надеюсь, это поможет.

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...