0

我正在尝试使用 picketlink 保护应用程序。我正在使用 JBoss 6.4.18。

SSO 操作没有任何问题。问题在于 SLO,基本上,picketlink 将 LogoutRequest 断言发送到错误的端点。我的战争中的 IdP 元数据具有以下端点:

<md:ArtifactResolutionService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://myidp.com/saml2/soap" index="0" isDefault="true"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://myidp.com/saml2/slo" ResponseLocation="https://myidp.com/saml2/slo_return"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://myidp.com/saml2/slo" ResponseLocation="https://myidp.com/saml2/slo_return"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://myidp.com/saml2/soap"/>
<md:ManageNameIDService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://myidp.com/saml2/rni" ResponseLocation="https://myidp.com/saml2/rni_return"/>
<md:ManageNameIDService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://myidp.com/saml2/rni" ResponseLocation="https://myidp.com/saml2/rni_return"/>
<md:ManageNameIDService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://myidp.com/saml2/soap"/>
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:persistent</md:NameIDFormat>
<md:NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://myidp.com/saml2/sso"/>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://myidp.com/saml2/sso"/>
<md:NameIDMappingService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://myidp.com/saml2/soap"/>

LogoutRequest 断言对我来说看起来不错,但是,picketlink 将其发送到 /sso 端点,而不是使用 /slo(如元数据所示)。当 idp 收到 LogoutRequest 时,它甚至不会将浏览器重定向回 SP 应用程序。

断言实际上有正确的目的地,但正如我所说,浏览器发送到 /sso 端点。

<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
                 xmlns="urn:oasis:names:tc:SAML:2.0:assertion"
                 Destination="https://myidp.com/saml2/sso"

这是纠察链接中的错误吗?我必须说我已经使用其他 IdP 服务器对其进行了配置,其中两种断言的端点相同,在这种情况下,SLO 工作得很好。

非常感谢您对此提供的帮助。

谢谢你。

4

1 回答 1

0

最后我无法通过配置解决这个问题。人们会期望 picketlink 将 SLO 断言发送到元数据文件中声明的端点,但正如我在上面的问题中所描述的那样,它没有。

通过检查插件代码,我看到它可以读取请求参数来决定将注销请求断言发送到哪个端点。

因此,当 SP 请求 GLO 时,我添加了另一个请求参数,如下所示:

/?GLO=true&picketlink.desired.idp="+encodedSLOEndpointURL

picketlink 读取该参数 (picketlink.desired.idp) 并将断言发送到 IdP 端的该端点。

PS我希望这是我最后一次处理像纠察队这样的老图书馆。

于 2020-07-02T01:05:17.290 回答