Promises / Observables与重定向

时间:2018-05-05 18:12:37

标签: angular http keycloak

Hello Stack社区,
我即将集成一些身份验证服务器,该服务器将委托角度应用程序中的登录活动。基本流程看起来像下面的代码:

document.getElementById('userInput').setAttribute("data-lpignore", "true");

但考虑到内部登录功能会发生一些重定向(到外部登录服务器):

const elements = document.getElementsByClassName('no-last-pass');
for (let element of elements) {
    element.setAttribute("data-lpignore", "true");
}

我的问题是,如果发生了重定向,那么authService.login() .then((res) => { /* Check login operation result, parse token */ }) 调用之后的login() { window.location.replace('URL-to-auth-server') } 函数永远不会被调用,因为重定向将重新加载页面内容,javascritps将再次运行,甚至回到主页面?

更具体地说,集成是关于KeyCloak和Angular 5.只有关于配对这两者的可用网络资源使用全有或全无的方法:在Angular bootstrap过程之前启动keycloak重定向。如果失败,则不会加载应用程序。我想在不登录的情况下显示应用程序的某些部分,但仅限经过身份验证的用户限制一些API调用。

2 个答案:

答案 0 :(得分:0)

我会尝试使用其中一个库。我将KeyCloak和Angular与angular-oauth2-oidc集成在一起 在重定向到KeyCloaks登录页面时使用隐式流程,并在登录后接收访问令牌。您可以使用Angular的CanActivate Guard基于具有受限访问权限的URL来执行此操作。这意味着只有在用户导航到受限制的路径且当前存储中没有访问令牌时,身份验证/授权才会启动。

答案 1 :(得分:0)

好的,我对此做了一些进一步的研究,结果如下:

回答我的主要问题: 当重定向进入时,Promises / Observables流会丢失,这很明显。误导我的是KeyCloak提出的集成解决方案,其中发生了间接承诺使用(即只有在用户已经登录时才使用承诺):

  1. 在引导Web应用程序身份验证库之前 初始化
  2. 初始化库将检查,验证cookie 存在

    • 如果是,它将不会重定向,但通过标准XHR验证这一点 cookie并继续引导web应用程序 - >承诺将正常工作

    • 如果不是,将重定向到外部认证服务器登录 页面 - >承诺将无法满足此应用程序运行

  3. 外部登录成功后,验证服务器将成功 再次重定向到Web应用程序(存储身份验证cookie)并将重新启动一次