javascript - Keycloak 检查-sso 创建

标签 javascript angular authentication keycloak keycloak-services

我正在使用 Angular 8.0.3、keycloak 8.0.0 和 keycloak-service 7.0.1

我正在尝试创建一些公共(public)页面,因此我使用“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

最佳答案

您正在使用 onLoad: 'check-sso',它仅在用户登录时对客户端进行身份验证。

您应该改用onLoad: 'login-required'

关于javascript - Keycloak 检查-sso 创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59289320/

相关文章:

angular - FullCalendar::Angular 5 应用程序中的日历问题

python - 使用Python登录谷歌账号进入网站

javascript - 如何使用 Google Apps 脚本在 Google 表单中获取 URL 参数?

angular - ngrx/effects 方法比 redux-thunk 有什么优势?

javascript - Bootstrap 折叠菜单

Angular 8 : Make FormBuilder Accept Numbers Only with Range for Latitude and Longitude

django - 如何为 django-graphql-auth 使用自定义用户模型

Azure Web App Easy Auth 处理 (/.auth/me)

javascript - 带有 ajax 请求的 mouseover/mouseout 事件

javascript - 使用 jquery addClass 到多个不同的元素