3

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

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

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

您认为实现这一点的最佳方法是什么?

我正在尝试通过XMLHttpRequest对 IdP 执行 JavaScript 调用,但它没有像我预期的那样工作......我的想法不是自己构建 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. 安全资源的实现只是一个重定向到原始资源的servlet

        // 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 服务或类似的东西......

提前致谢,

路易斯

4

0 回答 0