gpt4 book ai didi

javascript - Keycloak 不使用 checkLoginIframe 登录,刷新 token 未定义

转载 作者:行者123 更新时间:2023-12-05 06:53:41 26 4
gpt4 key购买 nike

我正在尝试使用 Angular 10(Keycloak 服务器版本为 7.0.1)设置 Keycloak 客户端,但我在使用 checkLoginIframe 选项时遇到了一些问题。

我有一个 check-sso Keycloak 情况,客户端不需要一直进行身份验证,但是,每次我尝试执行登录时,我都会在重定向到我的应用程序后收到错误消息。错误是:[KEYCLOAK] 刷新 token 失败。

在网络选项卡中,我可以看到客户端向 Keycloak 服务器发送了刷新 token 的请求,但调用的正文具有未定义的刷新 token ,因此响应为 400。

我还注意到“init”Keycloak 函数的结果是 true,但 Keycloak 实例仍然将“authenticated”字段设置为 false。

我尝试将 checkLoginIframe 设置为 false 并且它起作用了,但是应用程序在被实例化之前执行了许多重定向并且应用程序丢失的路由(因此用户被重定向到主页)

initializeKeycloak(): Observable<any> {
const keycloak = new Keycloak('/assets/keycloak.json');
// const keycloak = new Keycloak('/assets/keycloak.json');
let initOptions = {
onLoad: 'check-sso',
silentCheckSsoRedirectUri: window.location.origin + AppConstants.SILENT_CHECK_SSO_ROUTE,
promiseType: 'native',
redirect_uri: window.location.href,
checkLoginIframe: true,
// enableBearerInterceptor: true,
// bearerExcludedUrls: ['/assets'],
flow: 'standard',
silentCheckSsoFallback: false
};

return from(keycloak.init(initOptions)).pipe(
tap(authenticated => {
console.log(authenticated)
this._keycloak = keycloak;
console.log(this._keycloak)
}),
mergeMap(/*my application logic for the logged user data fetch*/),
catchError((err) => {
console.error(err);
throw err;
})
);
}

最佳答案

我找到了一个实现信号量的解决方法(这可能是正确的方法)。该问题与应用程序启动后初始化的 Keycloak 实例有关(因为它是异步的),而应用程序逻辑想要几乎立即刷新 token 。

我刚刚添加了一个 header 拦截器,它捕获每个调用并在释放调用之前等待 Keycloak 初始化。

无论如何,我必须将 checkLoginIframe 设置为 false,但重定向不再发生。

  private async waitForInit() {
for (let i = 0; i < 5; i++) {
if (this.ssoService.isInitialized()) {
break;
}
await this.sleep(500);
}
}

private sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}

关于javascript - Keycloak 不使用 checkLoginIframe 登录,刷新 token 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65720814/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com