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 吗?
最终我通过以下设置完成了任务:
在授权服务中我生成了登录名-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);
}
在 /shibprotected/getJWT
(这是在同一台服务器上通过 shibboleth 保护的页面)我生成 JWT 并将其设置为 cookie。然后我重定向到 return_url:
setcookie("token", $token);
header("Location: " . $return_url);
回到 angular-app 我正在检查 document.cookie
中的令牌
这种方法有两个缺点,在将 shibboleth 与 SPA 一起使用时可能不可避免:
- 需要 Cookie
- 登录后必须重新加载 SPA
是否可以在 Angular4 SPA 中使用 Shibboleth? 如果是,如何?
我的场景是这样的:我有一个无需登录就可以全局访问的SPA。某些页面只能在使用 Shibboleth 登录后才能访问。因此,我想通过 Shibboleth 对用户进行身份验证,并为用户生成一个 JWT,用于针对为受保护页面提供内容的 API 进行身份验证。
我面临的问题是,用户必须导航到服务提供商的 shibboleth-login-page,因此让 SPA 登录。因此,我可以在 /shibprotected/getJWT
等受 shibboleth 保护的网站上创建 JWT,然后将用户重定向到那里。但是如何在我的 Angular 应用程序中取回令牌?那么我怎样才能将用户重定向回应用程序呢?
我可以为此任务使用 cookie 吗?
最终我通过以下设置完成了任务:
在授权服务中我生成了登录名-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); }
在
/shibprotected/getJWT
(这是在同一台服务器上通过 shibboleth 保护的页面)我生成 JWT 并将其设置为 cookie。然后我重定向到 return_url:setcookie("token", $token); header("Location: " . $return_url);
回到 angular-app 我正在检查
document.cookie
中的令牌
这种方法有两个缺点,在将 shibboleth 与 SPA 一起使用时可能不可避免:
- 需要 Cookie
- 登录后必须重新加载 SPA