我正在使用Angular 8.0.3,keycloak 8.0.0和keycloak-service 7.0.1
我正在尝试制作一些公共页面,所以我在使用'check-sso'。 如果我正确理解,如果用户未登录,浏览器将被重定向回该应用程序,并且保持未经身份验证的状态。
我的应用具有此路由:
const routes: Routes = [
{
path: '',
loadChildren: () => import('src/app/pages/pages.module').then(m => m.PagesModule),
canLoad: [IsAuthenticateGuard]
},
{
path: 'login',
component: LoginComponent,
canLoad: [IsNotAuthenticateGuard]
},
{
path: '**',
redirectTo: ''
}
]
后卫:
export class IsAuthenticateGuard implements CanLoad {
constructor(private keycloakService: KeycloakService, private router: Router) {}
canLoad(
route: Route,
segments: UrlSegment[]
): Observable<boolean>|Promise<boolean>|boolean {
return this.keycloakService.isLoggedIn().then(isLogged => {
if (!isLogged) {
this.router.navigateByUrl('/login');
}
return isLogged;
});
}
}
export class IsNotAuthenticateGuard implements CanActivate {
constructor(private keycloakService: KeycloakService,
private router: Router) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot):
Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
return this.keycloakService.isLoggedIn().then(isLogged => {
if (isLogged) {
this.router.navigateByUrl('/home');
}
return !isLogged;
});
}
}
我的keycloak有这个初始化配置:
keycloakService.init({
config: keycloakConfig,
initOptions: {
onLoad: 'check-sso',
checkLoginIframe: false
},
bearerExcludedUrls: ['/login'] // (I tried also '.*')
})
但是我被重定向到:
http://localhost:4200/#error=login_required&state=0b36094c-92ac-4703-a800-77f27e4d206d
没有任何附加内容...
我读了此书,但没有找到解决方法:
https://github.com/mauriciovigolo/keycloak-angular https://www.keycloak.org/docs/latest/securing_apps/index.html#_javascript_adapter
答案 0 :(得分:2)
您使用的onLoad: 'check-sso'
仅在用户登录后才对客户端进行身份验证。
您应该改用onLoad: 'login-required'
。