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

时间:2017-09-20 07:54:20

标签: angular single-page-application shibboleth

是否可以在Angular4 SPA中使用Shibboleth? 如果是,怎么样?

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

我面临的问题是,用户必须导航到服务提供商的shibboleth-login-page,因此请离开SPA进行登录。所以我可以在像/shibprotected/getJWT这样受shibboleth保护的网站上创建一个JWT,并将用户重定向到那里。但是如何在我的Angular应用程序中获取令牌?那么我该如何将用户重定向回应用程序呢?

我可以使用cookies来完成这项任务吗?

1 个答案:

答案 0 :(得分:1)

finnaly我通过以下设置管理任务:

    在身份验证服务中
  1. 我生成了login-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. 中检查令牌

    这种方法有两个缺点,当使用带有SPA的shibboleth时可能是不可避免的:

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