keycloak - Keycloak 的 SAML 单次注销
问题描述
我正在尝试在 keycloak 中为 SAML 实现单次注销,并且文档没有正确提及这一点并且令人困惑。我正在寻找有关如何实施它的确切步骤。到目前为止,我所做的是:
生成注销请求有效负载,对其进行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 错误消息“未知登录请求者”(即使我想注销)
这里的网站说请求是有效的。也许我错过了一些额外的参数或什么?我还需要一个确切的发送方式。我必须使用斯卡拉。提前致谢!
解决方案
我认为您的发行人可能是错误的。看起来您的发行者是 Keycloak URI,但它应该是代表您的应用程序(服务提供者)的 URI。它与您在 Keycloak 管理 gui 中配置的 SAML 客户端的客户端 ID 字段相同
推荐阅读
- flutter - 如何将小部件与线连接以构建例如节点图?
- quarkus - Quarkus 如何处理并发请求?
- python - 使用 Flopy 创建 vtk 输出
- django - 如何将 unique_together 约束添加到具有先前数据的 Django 表
- ios - 如何在 BarButtonitem 中检测长按
- sql - 在 SQL Server 中添加两个日期时间列并将结果除以 2
- angular - 如何在 Angular 8 中的组件之间共享数据
- nsis - How to add directory and sub directories in installer package
- sql - 在 postgres 表中计算不为空的 json 键-> 值
- javascript - 关于 vuejs 示例中的 promise 的解释请求