从Javascript调用SAML IdP

时间:2012-01-31 13:16:36

标签: ajax weblogic-10.x adfs2.0 saml-2.0

我再次需要社区的明智建议!!!

我必须在我的SSO系统中集成多个Web应用程序。 IdP是Active Directory联合服务(ADFS2),SP是Weblogic受管服务器。我正在为Web SSO配置文件中的SP启动的用例使用HTTP-POST绑定。

此设置正常,甚至我已经为WLS实施了SLO,太棒了!但是,总有一个但是......我有一个应用程序,可供未经身份验证的用户访问,访客用户。当用户通过身份验证时,他/她将看到不同的信息。

您认为这是实施此方法的最佳方法吗?

我正在尝试通过 XMLHttpRequest 对IdP执行JavaScript调用,但它没有像我期望的那样工作......我的想法不是自己构建SAMLRequest。这是,我正在请求我的应用程序的安全资源,而不是直接调用IdP。通过这种方式,Weblogic就是向IdP发出请求的那个(302重定向)。基本上mi的想法是下一个:

  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. 安全资源的实现只是一个重定向到原始资源的 servlet

        // Get the parameter "action" and redirect 
    resp.sendRedirect(req.getParameter("action"));
    
  4. 如果我们看看请求流程,或多或少就可以解决问题:

    1. http://spHost/sample/helloXmlHttpRequest.jsp
    2. http://spHost/sample/secure/login?action=sample/hello.jsp
    3. HTTP / 1.1 302暂时移动 - &gt; https://idpHost/adfs/ls/?SAMLRequest= ...
    4. 但最后我在 xmlhttp.send()中遇到错误组件返回失败代码:0x80004005(NS_ERROR_FAILURE) < / p>

      此外,我正在尝试讨厌的技巧,例如获取 iframe ,元素的内容,或者只是在脚本标记中调用安全资源:

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

      最后一个“解决方案”的问题是我无法获取HTML代码。

      任何想法?也许ADFS2提供任何REST服务或类似的东西......

      提前致谢,

      路易斯

0 个答案:

没有答案