请求无效,keycloak saml 登录后缺少参数用户名

Kai*_*der 3 saml single-sign-on simplesamlphp keycloak angular

我使用 keycloak 作为 simplesamlphp 身份提供者的身份代理,以便登录到 angular 应用程序。

keycloak 使用登录掩码正确重定向到身份提供者。登录后,身份提供者按预期重定向到 keycloak。不幸的是,我收到以下错误消息(作为 JSON):

{"error":"invalid_request","error_description":"Missing parameter: username"}
Run Code Online (Sandbox Code Playgroud)

我的 IdP 有一个用户,我的 keycloak 没有,因为我不想将用户另外存储在 keycloak 中。

我的经纪人配置如下所示: 在此处输入图片说明

我的客户端配置是这样的: 在此处输入图片说明

我既不熟悉 SAML 也不熟悉 Keycloak,所以如果我需要提供任何其他信息,请告诉我。

小智 5

好的,我设法解决了这个问题。就是这样:

显然,目前 KC 总是在本地存储经过身份验证的用户。这里为没有进口选项功能请求,但它已被推迟。请参阅此处:KEYCLOAK-4429

因此,基本上,您只需让 KC 创建一个本地用户并自动将代理帐户链接到新创建的用户。要做到这一点,您可以创建一个认证流程与这里看到的这两个步骤:验证流程待办事项,但是,在自动链接执行只是因为KC 3.5可用,因此JBOSS SSO 7.2(基于KC 3.4)可能不会支持这个。

然后,您可以在身份提供者配置中使用此流程作为首次登录流程。

下一次,当通过外部 IdP 登录时,KC 将创建一个新用户并将其链接到在外部 IdP 中使用的用户。创建的用户随后将与您的客户端一起使用。

还有两件事:

  • 您可以使用身份提供程序配置映射器,以自动将断言声明中的属性直接导入新创建的 KC 用户。然后,您可以使用您的客户端配置 Mappers,将这些属性作为附加声明传递(在我的情况下,我需要通过 SAML 获得的 UID 属性)。
  • 您可以在您的领域中配置用户联合,例如通过添加 LDAP 连接,在这种情况下,KC 不仅会创建默认的新用户,还会通过 LDAP 正确自动导入所述用户,然后将其与您的 IdP 用户链接。