Keycloak 的 SAML 单点注销
SAML Single Logout for Keycloak
我正在尝试在 keycloak 中为 SAML 实现单点注销,但文档没有正确提及这一点并且令人困惑。我一直在寻找有关如何实施它的确切步骤。到目前为止,我所做的是:
生成注销请求payload,base64编码,url编码后作为参数发送给注销url。假设域名是Abc
http://auth-server/auth/realms/Abc/protocol/saml?SAMLRequest={encodedSAMLRequest}
saml 负载是
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="random uuid" Version="2.0" IssueInstant="2021-02-09T06:53:26Z" Destination="ip-address:8443/auth/realms/Abc/protocol/saml">
<saml:Issuer>https://ip-address:8443/auth/realms/Abc</saml:Issuer>
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">user-email@abc.com</saml:NameID>
</samlp:LogoutRequest>
但是,在发送此邮件时,我收到 400 错误提示“未知登录请求者”
(尽管我想注销)
站点 here 表示请求有效。也许我缺少一些额外的参数或其他什么?我还需要一种准确的发送方式。我必须使用scala。提前致谢!
我认为您的 Issuer 可能是错误的。
看起来你的发行者是一个 Keycloak URI,但它应该是一个代表你的应用程序(服务提供商)的 URI。它与您在 Keycloak 管理界面中配置的 SAML 客户端的客户端 ID 字段相同
我正在尝试在 keycloak 中为 SAML 实现单点注销,但文档没有正确提及这一点并且令人困惑。我一直在寻找有关如何实施它的确切步骤。到目前为止,我所做的是:
生成注销请求payload,base64编码,url编码后作为参数发送给注销url。假设域名是Abc
http://auth-server/auth/realms/Abc/protocol/saml?SAMLRequest={encodedSAMLRequest}
saml 负载是
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="random uuid" Version="2.0" IssueInstant="2021-02-09T06:53:26Z" Destination="ip-address:8443/auth/realms/Abc/protocol/saml">
<saml:Issuer>https://ip-address:8443/auth/realms/Abc</saml:Issuer>
<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">user-email@abc.com</saml:NameID>
</samlp:LogoutRequest>
但是,在发送此邮件时,我收到 400 错误提示“未知登录请求者” (尽管我想注销)
站点 here 表示请求有效。也许我缺少一些额外的参数或其他什么?我还需要一种准确的发送方式。我必须使用scala。提前致谢!
我认为您的 Issuer 可能是错误的。 看起来你的发行者是一个 Keycloak URI,但它应该是一个代表你的应用程序(服务提供商)的 URI。它与您在 Keycloak 管理界面中配置的 SAML 客户端的客户端 ID 字段相同