带有密钥斗篷的基本 SAML 代理不会重定向回应用程序

问题描述 投票:0回答:1

我们正在将我们的应用程序从传统的数据库登录转移到 keycloak。旧系统使用 python-saml 包自行处理 SAML 登录。

现在,我们正试图让 keycloak 为我们做这件事。我对这整件事都很陌生。

基本的 OID 身份验证过程工作正常 - Web 前端应用程序与 keycloak 对话,显示一个对话框,并在输入凭据时,Web 应用程序获得一个用于与我们的后端对话的不记名令牌

对于使用 keycloak 作为代理的基于 SAML 外部 IDP 的登录,我配置如下(我使用私有的 simplesaml 服务器进行测试):

  1. 我在 keycloak 上创建了一个 SAML 2.0 身份提供者条目
  2. 从 IDPs 元数据 XML 导入设置

现在,当我打开网络应用程序时,它会点击 keycloak 登录页面,其中 keycloak 将此提供商别名(例如“samltest”)显示为一个按钮。 单击它会将我带到 simplesaml 登录页面并进行身份验证。

然后keycloak让我回到像https://keycloak.mydomain.com/auth/realms/development/broker/samltest/endpoint这样的URL

显示错误“找不到页面”的地方

我期望的是,由于 IDP 已接受登录,并将 SAML 断言发送回 keycloak,keycloak 现在应该像在常规非 SAML 登录时一样重定向回网页链接。

我已经为此苦苦思索了一段时间——我想不通。

我怎样才能让它发挥作用?

提前致谢

keycloak saml saml-2.0
1个回答
0
投票

自从我上次使用 KeyCloak 以来已经有一段时间了,但听起来您错误地配置了 Assertion Consumer Service。

通常当您构建服务并需要 SAML 身份验证时,您还会创建一个服务提供商元数据文件。它看起来像这样:

<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" validUntil="2027-03-15T09:42:12Z" cacheDuration="PT604800S" entityID="MyService">
  <md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <!-- ... -->
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="http://myservice/some/path/to/acs" index="0"/>
    <!-- ... -->
  </md:SPSSODescriptor>
  <!-- ... -->
</md:EntityDescriptor>

然后您可以部署此文件,例如到 ADFS 以将其用作您的身份提供者。

关键是,你需要告诉 IdP 登录成功后将用户发送到哪里。在您的情况下,它似乎是错误的 URL。我不知道你在 KeyCloak 中具体在哪里设置它,但从 SAML Auth Flow 的角度来看,你描述的行为与 ACS URL 中的错误值匹配。

© www.soinside.com 2019 - 2024. All rights reserved.