Я интегрировал Keycloak с нашим приложением. Процессы входа и выхода работают правильно, за исключением одного сценария. Я хотел аутентифицироваться, а затем авторизовать каждый маршрут.Потому что, когда пользователь очищает сеанс браузера или очищает сеанс из консоли администратора keycloak, когда пользователь пытается получить доступ к другому маршруту, он говорит 401, так как я написал AppGuard.Я попытался проверить getKeycloakInstance (), он возвращает тот же объект, когда имеет действительный сеанс и после истечения срока сеанса также.Затем я попытался вызвать init (config) из canActive () AuthGuard, он постоянно зацикливался.Как пройти аутентификацию на уровне маршрута.
app-routing.module.ts
{
path: '',
canActivate: [AppAuthGuard],
data: {
path:'/idam/*'
},
loadChildren: './idam/idam.module#IdamModule'
},
app-auth-guard.ts
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
if (!this.keycloakService.getIsClientSecretKeyFetch()) {
this.errorHandler._enlivenErrorhandler.handleError({"status":"401","message" :"Unable to get client details. Please contact your administrator ","url":window.location.href});
this.router.navigate(['404'], { queryParams: { tenantId: this.cookieService.get('tenantId') } });
}
return super.canActivate(route, state);
}
isAccessAllowed(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Promise<boolean> {
return new Promise((resolve, reject) => {
if (!this.authenticated) {
this.keycloakAngular.login();
return;
}
const path = route.data.path;
this.keycloakService.isAuthorized(path).then(
(res) => {
let access = res;
if (access) {
resolve(true);
} else {
resolve(false);
}
});
resolve(true);
});
}