11

我正在运行saml-broker-authentication示例。我在 UI 中看到的第一件事是用户/通行证,可以选择使用代理(下图)。

有没有办法跳过这个表格直接去 IDP?

单击其中一个 IDP 后,我得到一个 URL:http://localhost:8080/auth/realms/saml-broker-authentication-realm/broker/sanity-idp/login?client_id=saml-broker-authentication&code=<keycloak generated>

我尝试直接使用以下网址(不带代码),但出现错误。( http://localhost:8080/auth/realms/saml-broker-authentication-realm/broker/sanity-idp/login?client_id=saml-broker-authentication)

知道如何绕过 Keycloak 身份验证并通过 SP(经纪人)直接进入 IDP 吗?谢谢。

更新:我的 TL 找到了一个静态解决方案,将 IDP ID 放入浏览器的身份验证流程中Identity Provider Redirector执行。但是,我们正试图找到一种动态的方式来做到这一点。查看了kc_idp_hint 文档,但找不到使 saml-broker-authentication 示例使用它的方法:(

在此处输入图像描述

4

8 回答 8

17

正如您所提到的,您可以通过为整个领域设置默认身份提供者来绕过 Keycloak 屏幕并直接进入 IdP:

可以自动重定向到身份提供者,而不是显示登录表单。要启用此功能,请转到管理控制台中的身份验证页面并选择浏览器流。然后单击身份提供程序重定向器身份验证器的配置。将默认身份提供者设置为要将用户自动重定向到的身份提供者的别名。

https://www.keycloak.org/docs/latest/server_admin/index.html#default_identity_provider

不幸的是,这是针对整个领域的,不能动态设置或按 SP 设置。kc_idp_hint似乎是解决方案,但仅适用于 OIDC:

OIDC 应用程序可以通过指定他们想要使用哪个身份提供者的提示来绕过 Keycloak 登录页面。

这是通过kc_idp_hint在授权代码流授权端点中设置查询参数来完成的。

https://www.keycloak.org/docs/latest/server_admin/#_client_suggested_idp

似乎有一个添加kc_idp_hint对 SAML 支持的功能请求,但仍未解决:

https://issues.jboss.org/browse/KEYCLOAK-4884

作为一种解决方法,您可以创建一个新领域并为该领域设置默认身份提供者。这样,如果您有需要代理到不同 IdP 的 SP,您可以在适当的领域中设置它们。

缺点是每个领域都充当自己的 IdP,因此它有自己的实体 ID、公钥等。您实际上必须每次重新设置 SP 以使其默认为不同的 IdP。

于 2018-07-24T17:05:30.007 回答
5

要将身份提供者设置为默认的忽略 keycloak 登录表单,只需转到身份验证菜单 > 身份提供者重定向操作链接 > 将默认身份提供者设置为您想要的提供者的别名。从浏览器 localhost:8080/realm[...]/account 打开后,您将被自动重定向到您的提供商登录页面。

于 2018-08-14T05:01:45.533 回答
5

这是一个旧帖子,但对于某人来说可能仍然是真实的。

  1. 对于在 keycloak 管理面板中设置的身份提供者登录页面上的静态重定向,将 name from 设置Identity Providers -> nameAuthentication -> Identity Provider Redirector -> config -> Default Identity Provider. 在那之后,请求https://{KK}/realms/{RM}/protocol/openid-connect/auth?...会将您重定向到身份提供者,例如 facebook

  2. 动态选择 idp。如果您不去 idp 登录页面,您可以kc_idp_hint在 KK 中添加额外的参数,例如

// go to KK login page with username/pass and choice of idp provider
https://{KK}/realms/{RM}/protocol/openid-connect/auth?...&kc_idp_hint

// go to facebook login page if facebook idp is cinfigure 
https://{KK}/realms/{RM}/protocol/openid-connect/auth?...&kc_idp_hint=facebook

// go to other login page
https://{KK}/realms/{RM}/protocol/openid-connect/auth?...&kc_idp_hint=other
于 2019-12-25T22:47:39.830 回答
4

在搜索了很多之后,我设法用这行代码做到了:

keycloakAuth.login({idpHint: 'facebook'});

keycloakAuth 是:

keycloakAuth = Keycloak({
    url: environment.keycloakRootUrl,
    realm: 'realm',
    clientId: 'client-id',
    'ssl-required': 'external',
    'public-client': true
});

无需将其设置为默认身份提供者

于 2019-08-18T22:09:57.590 回答
1

为了跳过 SSO,首先 keycloak init 然后通过 idp_hint 登录。

 const options: KeycloakLoginOptions = {
      idpHint: ' ',
    };
    keycloak.init({}).then(() => {
      keycloak.login(options).then(() => {
        onSuccess();
      });
    });
于 2021-03-29T17:17:07.397 回答
1

kc_idp_hint将通过传递IDP别名而不是IDP显示名称来使用SAML 。

于 2021-09-06T13:13:32.357 回答
0

您还可以在 IdentityProviderAuthenticator 类之上扩展和编写新的身份验证器 spi,其中身份验证根据请求 url 属性执行重定向()。

否则大多数情况下,资源 url 中的 kc_idp_hint 会有所帮助。

E.g https://resourceserver/resourcepath?kc_idp_hint=google
于 2020-07-08T15:05:35.140 回答
0

为了通过 Keycloak 代理重定向到 IDP 登录页面,您可以使用以下 URL:http://localhost:8080/saml-broker-authentication/

于 2017-10-06T15:24:40.850 回答