如何将角度应用程序从keycloak登录重定向到特定路线

Posted

技术标签:

【中文标题】如何将角度应用程序从keycloak登录重定向到特定路线【英文标题】:How to redirect angular app from keycloak login to specific routes 【发布时间】:2020-01-14 19:00:45 【问题描述】:

我正在编写一个 Angular 8 应用程序,它使用 Keycloak 7.0.0 进行用户身份验证和授权。

当前工作流程指定:

    用户访问使用 Angular 编写的网站 用户被重定向到 Keycloak 服务器以进行特定领域登录 成功登录后,用户将被重定向到多个 (Angular) 路由之一 - 取决于 Keycloak 中定义的用户角色(但是,重定向路由是在获取用户角色和重定向的 angular 组件内部确定的)。因此,登录后 Keycloak 重定向到空路由并且组件设置重定向路由。

问题是,在成功登录后,如果用户打开另一个选项卡并输入指定路由的 URL,Keycloak 会找到当前会话的令牌和 cookie,而不是验证用户,但仍会重定向他到空的路线。之后,根据用户角色重定向到路由的功能将重定向到用户角色的默认路由。

我对如何启用 Keycloak 感兴趣,以便在验证登录后重定向到它收到的初始路由,而不仅仅是空路由?

我希望不需要任何代码,因为代码位于私有存储库中。我正在使用 keycloak-angularkeycloak-js npm 模块。另外,我定义了 keycloak.servise.ts 可以访问用户的令牌并指定需要登录。

附:我没有使用 authguard 来实现受保护的路由,但是 Keycloak 重定向到空路由,然后,根据用户的角色,空角色中的组件重定向到默认的组件并锁定那些组件不允许。

【问题讨论】:

【参考方案1】:

在KeycloakService的Login方法中提供KeycloakLoginOptions。

例如

keycloakLoginOptions: KeycloakLoginOptions = 
    redirectUri: 'http://localhost:4200/dashboard'
  

然后调用这个:

this.keycloakService.login(this.keycloakLoginOptions);

【讨论】:

以上是关于如何将角度应用程序从keycloak登录重定向到特定路线的主要内容,如果未能解决你的问题,请参考以下文章

根据角色将不同的用户重定向到 Keycloak 登录的不同页面

如果 keycloak 会话过期,我如何重定向到登录页面?

使用 Keycloak 实现单点登录

重定向到登录时的 Keycloak CORS 问题

空闲超时后,由 Keycloak 客户端应用程序保护重定向到登录页面。应用程序位于应用程序网关后面

成功登录后的 Node.js Express 无限重定向循环