我正在尝试将WSO2 IS与Liferay整合为服务提供商,但到目前为止我还没有成功。根据三个JIRA问题和Benjamin Schmeling在WSO2氧气罐上提供的补丁,对代码进行了一些修改: https://wso2.org/jira/browse/IDENTITY-2856
WSO2 IS上的SAML设置如下:
Assertion Consumer URL: liferayserver:8080/c/portal/saml/acs
NameID Format: urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
Use fully Qualified username on NameID
Enable Response Signing
Enable Assertion Signing
Enable Single logout
-> ConsumerURL: liferayserver:8080/c/portal/saml/slo_redirect
Enable attribute profile
然而Liferay返回以下异常:
Liferay returns the following exception:
[code]23:00:50,071 ERROR [http-thread-pool-8080(4)][BaseSamlStrutsAction:45] com.liferay.saml.UnsupportedBindingException
com.liferay.saml.UnsupportedBindingException
at com.liferay.saml.profile.SingleLogoutProfileImpl.processSingleLogout(SingleLogoutProfileImpl.java:216)
at com.liferay.saml.profile.SingleLogoutProfileUtil.processSingleLogout(SingleLogoutProfileUtil.java:54)
at com.liferay.saml.hook.action.SingleLogoutAction.doExecute(SingleLogoutAction.java:39)
at com.liferay.saml.hook.action.BaseSamlStrutsAction.execute(BaseSamlStrutsAction.java:42)
at com.liferay.portal.kernel.struts.BaseStrutsAction.execute(BaseStrutsAction.java:39)
我还尝试将单个注销端点更改为liferayserver:8080 / c / portal / saml / slo无效。在这两种情况下,会话都在Identity Server(WSO2)上关闭,但不在服务提供者(Liferay)上关闭。
关于问题可能是什么的任何想法?
答案 0 :(得分:1)
事实证明,为了使单点注销工作,还需要两个额外的修改。我会留下这些,以防他们帮助其他人,直到这些补丁集成到他们各自的产品中。特别感谢 Benjamin Schmeling 。
对于基于SAML的SLO,您应该使用 / c / portal / saml / slo_redirect 但是,Liferay无法处理发布请求(at 至少在最新版本的SAML portlet中)。你必须适应 Liferay SAML portlet 如下:
在 SingleLogoutProfileImpl.processSingleLogout(HttpServletRequest)中 请求,HttpServletesponse响应)如果分支添加新的else:
else if(requestPath.endsWith("/slo_redirect") && method.equalsIgnoreCase(HttpMethods.POST)){ samlBinding = getSamlBinding( SAMLConstants.SAML2_POST_BINDING_URI); }
此外,在 SingleLogoutProfileImpl.sendSpLogoutRequest(HttpServletRequest的 logoutRequest.setVersion之后的请求,HttpServletResponse响应 通过调用以下命令添加Wso2所需的SessionIndex: addSessionIndex(logoutRequest,samlSpSession.getSessionIndex());