我再次需要社区的明智建议!!!
我必须在我的 SSO 系统中集成几个 Web 应用程序。IdP 是 Active Directory 联合服务 (ADFS2),SP 是 Weblogic 托管服务器。我在 Web SSO 配置文件中为 SP 启动的用例使用 HTTP-POST 绑定。
这个设置是有效的,甚至我已经为 WLS 实现了 SLO,太棒了!但是,总有一个但是……我有一个应用程序可以供未经身份验证的用户访问,来宾用户。当用户通过身份验证时,他/她将看到不同的信息。
您认为实现这一点的最佳方法是什么?
我正在尝试通过XMLHttpRequest对 IdP 执行 JavaScript 调用,但它没有像我预期的那样工作......我的想法不是自己构建 SAMLRequest。也就是说,我不是直接调用 IdP,而是请求我的应用程序的安全资源。通过这种方式,Weblogic 就是向 IdP 发出请求(302 重定向)的方式。基本上我的想法是下一个:
在我的 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>
调用安全资源(感谢 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;
安全资源的实现只是一个重定向到原始资源的servlet:
// Get the parameter "action" and redirect resp.sendRedirect(req.getParameter("action"));
如果我们看一下请求流,它或多或少会起到作用:
- http://spHost/sample/helloXmlHttpRequest.jsp
- http://spHost/sample/secure/login?action=sample/hello.jsp
- 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 服务或类似的东西......
提前致谢,
路易斯