我正在运行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示例能够使用它的方法:(
答案 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)
这是一个古老的帖子,但对于某人可能仍然是真实的。
对于在身份验证提供程序登录页面上进行的静态重定向,该设置在密钥斗篷管理面板中设置,名称从Identity Providers -> name
到Authentication -> Identity Provider Redirector -> config -> Default Identity Provider
。发生这种情况后,对https://{KK}/realms/{RM}/protocol/openid-connect/auth?...
的请求会将您重定向到身份提供者,例如脸书
动态选择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