В разрешении JavaScript отказано. Как разрешить междоменный сценарий между доверенными доменами? - PullRequest
2 голосов
/ 04 июля 2010

У нас есть приложение на основе .net, размещенное на фреймах корпоративного портала SAP. Домен портала SAP - al.xx.companyname.com . Домен сервера приложений .Net: ss.xx.companyname.com .

Теперь, когда я открываю приложение через корпоративный портал, я получаю ошибку JavaScript «Отказано в доступе». Я включил отладку сценариев в IE, а затем подключил отладчик Visual Studio к ошибке JavaScript. Я заметил ошибку из следующего кода JavaScript для установки / сброса грязных флагов.

if(top.EPCM!=null)

Понятно, что проблема связана с междоменными сценариями. То есть сервер приложений ss.xx.companyname.com пытается получить доступ к компоненту браузера корпоративного портала домена al.xx.companyname.com.

Однако этот кросс-сценарий является сценарием доверенного домена, и я хочу как-то разрешить этот кросс-сценарий. Я попытался установить основной DNS-суффикс сервера приложений. следуя приведенному ниже подходу.

  1. Щелкните правой кнопкой мыши по Моему компьютеру сервера приложений. (Сервер Windows 2003, кстати)
  2. выберите свойства - имя компьютера
  3. Нажмите кнопку «Изменить» и в следующем окне нажмите кнопку «Еще»
  4. И в текстовом поле «Основной DNS-суффикс этого компьютера» я ввел значение - al.xx.companyname.com.

Теперь, после вышеуказанных настроек, я предполагаю, что домены корпоративного портала и сервера приложений будут приниматься за al.xx.companyname.com. Однако я все еще получаю ошибку «Отказано в разрешении JavaScript» в том же коде JavaScript, упомянутом выше.

Как предлагается в ответах, я также реализовал метод document.domain.

var requireddomain = 'al.xx.companyname.com';
var text = document.domain; //returns the domain as ss.xx.companyname.com

if (text != requireddomain) 
        {
            for (i=0; i < 2; i++)
            {
                dotposition = text.indexOf( "." );
                text = text.substr(dotposition +1);
            }
            document.domain = text;
         }

    if(top.EPCM!=null)

С помощью приведенного выше кода объект document.domain устанавливается как companyname.com , который является общим как для корпоративного портала, так и для сервера приложений. Тем не менее проблема с отказом в разрешении выдается в строке >> if (top.EPCM! = Null)

Эта проблема ломает мне голову последние 3 дня. Может кто-нибудь, пожалуйста, помогите мне с этим? Цель состоит в том, чтобы разрешить междоменный сценарий между сервером приложений и корпоративным порталом, который является надежным соединением. Спасибо.

Обновление:

Интересное и разочаровывающее развитие. Я установил ssl сертификаты на моем сервере приложений. И все же ошибка отказа в разрешении выдается.

  • Домен портала: al.xx.companyname.com
  • домен приложения: ss.xx.companyname.com

Я пытался установить для свойства document.domain 2 подуровня вниз, т.е. для companyname.com.

Но все равно возникает ошибка «Отказано в доступе».

Полагаю, настройка document.domain будет работать, только если домен приложения является подмножеством домена портала. т.е.

  • домен портала: al.xx.companyname.com
  • Домен приложения: ss.al.xx.companyname.com.

В приведенном выше случае я могу просто уменьшить домен приложения на один подуровень (до al.xx.companyname.com). Тогда, думаю, это сработает.

Однако в моем случае серверы портала и приложений являются двумя разветвленными поддоменами одного и того же companyname.com, и поэтому кросс-скриптинг по-прежнему запрещен.

Любые предложения о том, как поступить?

1 Ответ

7 голосов
/ 04 июля 2010

Политика одинакового происхождения, вероятно, настолько строга, что не делает исключений даже с доверенными сайтами.

Кросс-браузерное свойство document.domain должно иметь возможность решить эту проблему:

Существует одно исключение из того же правила происхождения.Сценарий может установить значение document.domain в суффикс текущего домена.Если это так, более короткий домен используется для последующих проверок происхождения.Например, предположим, что сценарий в документе со значением http://store.company.com/dir/other.html выполняет следующий оператор:

document.domain = "company.com";

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