Angular 单页应用程序 (SPA) 的 Shibboleth 身份验证

Shibboleth authentication for an Angular single page application (SPA)

是否可以在 Angular4 SPA 中使用 Shibboleth? 如果是,如何?

我的场景是这样的:我有一个无需登录就可以全局访问的SPA。某些页面只能在使用 Shibboleth 登录后才能访问。因此,我想通过 Shibboleth 对用户进行身份验证,并为用户生成一个 JWT,用于针对为受保护页面提供内容的 API 进行身份验证。

我面临的问题是,用户必须导航到服务提供商的 shibboleth-login-page,因此让 SPA 登录。因此,我可以在 /shibprotected/getJWT 等受 shibboleth 保护的网站上创建 JWT,然后将用户重定向到那里。但是如何在我的 Angular 应用程序中取回令牌?那么我怎样才能将用户重定向回应用程序呢?

我可以为此任务使用 cookie 吗?

最终我通过以下设置完成了任务:

  1. 在授权服务中我生成了登录名-URL,可以通过<a href="authService.getLoginUrl('/currentpage')">Login</a>:

    引用
      getLoginUrl(returnUrl = '') {
        if (returnUrl === '' || returnUrl.startsWith('/')) {
          returnUrl = window.location.origin + returnUrl;
        }
    
        return environment.backend_server_url + '/shibprotected/getJWT?return_url=' + encodeURIComponent(returnUrl);
      }
    
  2. /shibprotected/getJWT(这是在同一台服务器上通过 shibboleth 保护的页面)我生成 JWT 并将其设置为 cookie。然后我重定向到 return_url:

      setcookie("token", $token);
      header("Location: " . $return_url);
    
  3. 回到 angular-app 我正在检查 document.cookie

  4. 中的令牌

这种方法有两个缺点,在将 shibboleth 与 SPA 一起使用时可能不可避免:

  • 需要 Cookie
  • 登录后必须重新加载 SPA