如何将角度应用程序从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-angular 和 keycloak-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 登录的不同页面