如何绕过Keycloak登录表单并直接跳转到IDP登录?

时间:2017-09-24 13:29:58

标签: authentication keycloak service-provider idp

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

有没有办法跳过这个表格并直接进入IDP?

点击其中一个IDP后,我会得到一个类别的网址: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 auth并直接通过SP(经纪人)转到IDP?谢谢。

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

enter image description here

7 个答案:

答案 0 :(得分:2)

似乎有一个功能请求尚未解决:

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

如前所述,您可以通过设置整个领域(https://www.keycloak.org/docs/latest/server_admin/index.html#default_identity_provider)的默认身份提供者来绕过Keycloak屏幕并直接进入IdP。

由于是按领域设置的,因此您可以创建一个新领域并为该领域设置默认的身份提供程序。这样,如果您需要将SP代理到不同的IdP,则可以将它们设置在适当的领域。

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

答案 1 :(得分:2)

经过大量搜索后,我设法使用以下代码行完成了

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

keycloakAuth为:

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

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

答案 2 :(得分:1)

要将身份提供者设置为默认的身份提供者,而忽略密钥斗篷登录表单,只需转到身份验证菜单>“身份提供者重定向器”操作链接>将默认身份提供者设置为所需提供者的别名。从浏览器localhost:8080 / realm [...] /帐户打开后,您将自动重定向到您的提供程序登录页面。

答案 3 :(得分:1)

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

 const options: KeycloakLoginOptions = {
      idpHint: ' ',
    };
    keycloak.init({}).then(() => {
      keycloak.login(options).then(() => {
        onSuccess();
      });
    });

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

  1. 对于在身份验证提供程序登录页面上进行的静态重定向,该设置在密钥斗篷管理面板中设置,名称从Identity Providers -> nameAuthentication -> Identity Provider Redirector -> config -> Default Identity Provider。发生这种情况后,对https://{KK}/realms/{RM}/protocol/openid-connect/auth?...的请求会将您重定向到身份提供者,例如脸书

  2. 动态选择IDP。如果您不想进入idp登录页面,则可以在KK中添加其他参数kc_idp_hint,例如

// 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

答案 6 :(得分:0)

您还可以在IdentityProviderAuthenticator类的顶部扩展和编写新的Authenticator spi,在该类中,authenticate根据请求的url属性执行redirect()。

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

E.g https://resourceserver/resourcepath?kc_idp_hint=google