无法将 idpHint 选项传递给 Keycloak

Ale*_*ski 5 keycloak

我正在使用 IDP 提供程序进行身份验证并尝试绕过标准 keycloak 登录屏幕(因此我需要立即转到 IDP 特定授权屏幕)。根据此文档https://keycloak.gitbooks.io/server-adminstration-guide/content/topics/identity-broker/suggested.html,我们可以简单地为此提供 idpHint 。虽然那不起作用。

let keycloakAuth : any = new Keycloak('keycloak.json'); keycloakAuth.createLoginUrl({idpHint: 'ad-oidc'});

它失败了

Uncaught TypeError: Cannot read property 'redirectUri' of undefined at Keycloak.kc.createLoginUrl (keycloak-core.js:212)

据我了解,这是因为适配器尚未创建。因此,有时我们可能需要稍后传递此选项(但不确定在哪个阶段)。

我只能通过暂时将 idpHint 硬编码到 keycloak-core.js 本身内部来做到这一点。期待避免这种情况。

提前致谢。

ewe*_*ert 6

我这样解决了这个问题:

let kc = Keycloak('/backend/frontend.json');
let kcLogin = kc.login;
kc.login = (options) => {
  options.idpHint = 'some-hint';
  kcLogin(options);
};
kc.init({ onLoad: 'login-required' }).success((authenticated) => {
  console.log('Logged in!');
}});
Run Code Online (Sandbox Code Playgroud)

这样,第一次登录尝试就已经使用了提示。我不知何故不明白,为什么没有简单的方法来使用 idpHint 选项,inceptor 是我发现使用它的唯一方法,而无需直接修补 keycloak.js 文件。

如果 Keycloak 构造函数只接受 idpHint 选项,那就完美了。


Zik*_*iko 4

您必须首先初始化 keycloak 对象。

您不需要调用createLoginUrl(),您需要调用login(options),而login(options)又会调用createLoginUrl。

var keycloak = new keycloak(JSON);
keycloak.init().success(function(authenticated){
 if(authenticated){
   console.log("logged in");
}
else{
   keycloak.login({idpHint:'ad-oidc'});
}
}).error(function(){
console.log("failed to initialize");
});
Run Code Online (Sandbox Code Playgroud)

抱歉,可能存在语法错误,但我希望它能解释如何做到这一点。