我正在使用 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 本身内部来做到这一点。期待避免这种情况。
提前致谢。
我这样解决了这个问题:
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 选项,那就完美了。
您必须首先初始化 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)
抱歉,可能存在语法错误,但我希望它能解释如何做到这一点。
| 归档时间: |
|
| 查看次数: |
4986 次 |
| 最近记录: |