Вызовите SAML IdP из Javascript - PullRequest
       27

Вызовите SAML IdP из Javascript

3 голосов
/ 31 января 2012

Опять мне нужен мудрый совет Сообщества !!!

Мне нужно интегрировать несколько веб-приложений в мою систему единого входа.IdP - это службы федерации Active Directory (ADFS2), а SP - это управляемые серверы Weblogic.Я использую привязку HTTP-POST для варианта использования, инициированного SP, в профиле единого входа в Интернет.

Эта настройка работает, и даже я реализовал SLO для WLS, отлично!но всегда есть но ... У меня есть приложение, к которому можно получить доступ для неаутентифицированных пользователей, гостевых пользователей .Когда пользователь аутентифицирован, он / она увидит другую информацию.

Как вы думаете, что будет лучшим подходом для реализации этого?

Я пытаюсь выполнить вызов JavaScript для IdP через XMLHttpRequest , но это не работает так, как я ожидал ... Моя идея не в том, чтобы создать SAMLRequest самостоятельно.Это вместо того, чтобы напрямую вызывать IdP, я запрашиваю безопасный ресурс моего приложения.Таким образом, Weblogic выполняет запрос к IdP (перенаправление 302).По сути, моя идея заключается в следующем:

  1. Объявить ограничение безопасности в моем web.xml:

    <security-constraint>
    <web-resource-collection>
        <web-resource-name>secure</web-resource-name>
        <url-pattern>/secure/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>FederatedUsers</role-name>
    </auth-constraint>
    

  2. Вызов безопасного ресурса (спасибо w3schools!):

    <script type="text/javascript">
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET", "secure/login?action=sample/hello.jsp", false);
    xmlhttp.send();
    xmlDoc = xmlhttp.responseXML;
    

  3. Реализация защищенного ресурса - это просто сервлет , который перенаправляетк исходному ресурсу:

        // Get the parameter "action" and redirect 
    resp.sendRedirect(req.getParameter("action"));
    

Более или менее это делает свое дело, если мы посмотрим на поток запросов:

  1. http://spHost/sample/helloXmlHttpRequest.jsp
  2. http://spHost/sample/secure/login?action=sample/hello.jsp
  3. HTTP / 1.1 302 Временно перемещено -> https://idpHost/adfs/ls/?SAMLRequest=...

Но в конце я получаю ошибку в xmlhttp.send () : Компонент возвратил код ошибки: 0x80004005 (NS_ERROR_FAILURE)

Также я пытаюсь сделать неприятные трюки какполучить содержимое элемента iframe или просто вызвать безопасный ресурс в теге сценария:

<script type="text/javascript" src="secure/login">

Проблема этого последнего «решения» заключается вчто я не могу получить код HTML.

Есть идеи? Может быть, ADFS2 предоставляет какой-нибудь сервис REST или что-то в этом роде ...

Заранее спасибо,

Луис

...