Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Ajax кроссдоменная авторизация


Автор: strS 30.7.2013, 14:31
Есть 2  веб-сервер, на них реализована авторизация через ajax. Вот код:

Код

function TryLogin(url, username, password, callback) {
    
    var ajaxObject = {
        url: "/QVAJAXZFC/Authenticate.aspx",
        type: 'GET',
        cache: false,
        error: function () {
            callback(false);
        },
        success: function () {
            callback(true);
        }
    };
    if (username != null && password != null) {
        username = encodeURIComponent( username );
        password = encodeURIComponent( password );
        ajaxObject.username = username;
        ajaxObject.password = password;
        if (window.btoa) {
            ajaxObject.headers = { 'Authorization': 'Basic ' + window.btoa(username + ':' + password) };
        }
    }
    
    $.ajax( ajaxObject );


Путь до даммой страницы - http://citto-analit-02/qlikview/login2.htm и http://analit/qlikview/login2.htm
Оба веб-сервера абсолютно одинаковые.

Я хочу пройти авторизацию с первого сервера на втором сервере.

Что мне нужно сделать, чтобы произвести авторизацию на другом сервере программно?


Пытался добавлять        

dataType:"jsonp",
crossDomain: true,

не помогло =(. Библиотека jquery 1.7

В общем ничего не понимаю. Куда-то не туда двигаюсь.

Мне же вроде нужно отправлять ajaxObject с первого сервака на второй? 
Надеюсь на вашу помощь

Автор: akizelokro 30.7.2013, 18:30
JavaScript грузится в браузерах. Ты подгрузил браузер на сервере?
Но даже и в этом случае браузер уже клиент(ское приложение). Могут, конечно, прописать и JS как отдельный модуль для сервера, но фактически ты пытаешься получить доступ в клиенте.
Потом же, есть политика безопасности для серверов и клиентов (браузеров). Ты пробовал запустить свой код по отдельности с авторизацией на веб-страницах, каждой для своего сервера? Должно работать, думаю. А на странице с одного сервера, чтобы авторизоваться на другом, не работает?

Автор: _zorn_ 31.7.2013, 06:27
Попробуй добавить в заголовок ответа запрашиваемой страницы Access-Control-Allow-Origin: *

Автор: strS 31.7.2013, 07:58
_zorn_

Добавил, не получилось

Вот код:

Код

function TryLogin(url, username, password, callback) {
    
    var ajaxObject = {
        url: "http://citto-analit-02/QVAJAXZFC/Authenticate.aspx",
        type: 'GET',
        dataType: 'jsonp',
        crossDomain: true,
        cache: false,
        error: function () {
            callback(false);
        },
        success: function () {
            callback(true);
        }
    };
    if (username != null && password != null) {
        username = encodeURIComponent( username );
        password = encodeURIComponent( password );
        ajaxObject.username = username;
        ajaxObject.password = password;
        if (window.btoa) {
            ajaxObject.setRequestHeader = { 'Authorization': 'Basic ' + window.btoa(username + ':' + password) };
        ajaxObject.setRequestHeader = { 'Access-Control-Allow-Origin': '*' };
        }
    }
    
    $.ajax( ajaxObject );
}


Что интересно, если я зайду на http://citto-analit-02/qlikview/login2.htm и пройду авторизацию, то все ок, а если на http://localhost/qlikview/login2.htm , то ругается и меня не пускает.
(пока что пытаюсь попробовать на своем компе)

Автор: strS 31.7.2013, 08:19
akizelokro

да, не работает. 
чтобы было более понятно, вот ссылка на сервак - http://analit.72to.ru/qlikview/FormLogin.htm
мне нужно авторизоваться на нем программно

вот не могу придумать как) 

Автор: _zorn_ 31.7.2013, 08:45
Цитата(strS @  31.7.2013,  15:58 Найти цитируемый пост)
Добавил, не получилось

http://analit.72to.ru/QvAJAXZfc/Authenticate.aspx
Код

Response Headers
================
Content-Type: application/xml;charset=UTF-8
Content-Length: 15730

200 

Где ?

Автор: strS 31.7.2013, 10:42
_zorn_,  я добавлял на тестовом сервере...

сейчас правильно?

Автор: _zorn_ 1.8.2013, 04:12
Цитата(strS @ 31.7.2013,  18:42)
_zorn_,  я добавлял на тестовом сервере...

сейчас правильно?

Все равно нет этого заголовка.

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

Код

Соединение было сброшено
                
          Во время загрузки страницы соединение с сервером было сброшено.
        
  Возможно, сайт временно недоступен или перегружен запросами. Подождите некоторое время и попробуйте снова.
  Если вы не можете загрузить ни одну страницу – проверьте настройки соединения с Интернетом.
  Если ваш компьютер или сеть защищены межсетевым экраном или прокси-сервером – убедитесь, что Firefox разрешён выход в Интернет.

Автор: strS 1.8.2013, 06:00
_zorn_

перейдите на
http://analit.72to.ru

Автор: Sanchezzz 2.8.2013, 19:36
Access-Control-Allow-Origin: *
должен говорить сервер но не посылать клиент.

например на PHP Это выглядит так 
Код

<?
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
header('Access-Control-Allow-Headers: X-Requested-With');

Достаточно указывать Access-Control-Allow-Origin остальные для уточнения.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)