WSO2身份服务器:单一注销不发送给所有服务提供商

时间:2015-05-14 16:29:46

标签: java xml wso2 single-sign-on saml-2.0

我正在尝试使用WSO2实现单点注销,但已经碰壁了。

发起服务提供商成功地将注销请求发送到IdP(WSO2),并接收注销响应。但是,没有其他登录的服务提供商从IdP接收注销命令。

我已经通过控制台为LogoutRequestSender类启用了调试级日志记录,我看到以下日志:“将一个logoutReqSenderTask分配给线程池”

查看LogoutRequestSender类的源代码,私有类“LogoutReqSenderTask”(实现“Runnable”)应该创建一个带有SAMLRequest值的调试日志:

public void run() {
    List<NameValuePair> logoutReqParams = new ArrayList<NameValuePair>();
    // set the logout request
    logoutReqParams.add(new BasicNameValuePair("SAMLRequest", logoutReqDTO.getLogoutResponse()));

    if(log.isDebugEnabled()) {
        try {
            log.debug("SAMLRequest : " + SAMLSSOUtil.decodeForPost(logoutReqDTO.getLogoutResponse()));
        } catch (IdentityException e) {
            log.debug(e);
        }
    }
    //...snip...
}

但是,此日志永远不会被写入,表明此代码未被执行。

我能想到的唯一想法是“run”方法在进入方法的第一个“try”之前遇到未处理的excpetion,因此永远不会写入日志(因为这代码使用“ExecutorService”对线程进行排队,未处理的异常将以静默方式失败。

以下是我从SP发送给IdP的退出请求示例(匿名):

<samlp:LogoutRequest 
    xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" 
    ID="S2E267375A5BFB18E3B54FE839AF43B2F84AAE1E7A" 
    Version="2.0" 
    IssueInstant="2015-05-13T20:19:41Z" 
    Destination="[SSO Server Location]">
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">[Issuer name]</saml:Issuer>
    <saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" NameQualifier="[SSO Server Location]">UserName</saml:NameID>
    <samlp:SessionIndex xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">d1b98786-f9d7-45dd-9712-a63f8f64cb02</samlp:SessionIndex>
</samlp:LogoutRequest>

我在这里做错了什么?

0 个答案:

没有答案