如何使用CAS身份验证制作Angular 5 + Node应用程序?

时间:2018-03-27 13:23:16

标签: node.js angular authentication cas

我目前正在尝试构建一个应用程序,需要用户通过CAS(Centrale身份验证服务)进行身份验证才能使用它。我使用Angular 5作为前端,Node.js作为后端。

要在服务器端验证用户,我正在使用名为“r-cas-authentication”的模块,该模块在用户通过身份验证时创建快速会话。事实上,如果用户经过身份验证,我不知道如何检查Angular端,否则将他重定向到CAS身份验证页面。

你知道我怎么做吗? 谢谢!

1 个答案:

答案 0 :(得分:0)

您无需在angular方面处理此问题。只需让Node服务器将未经身份验证的用户重定向到登录页面。浏览器设置会话标头,您的节点服务器将看到没有身份验证并发送重定向。 r-cas-authentication模块提到了文档中的bouncebounce_redirect选项,这将进一步简化流程。

您的节点实例将提供登录页面。:

app.get('/login', (req, res) => res.sendFile('path/to/login.html'));

此外,您的资产(前端脚本,CSS,图像等)(通常)可以自由拥有:

app.get('/assets', express.static(pathToStaticDirectory));

此外,您还拥有身份验证终结点:

app.get( '/authenticate', cas.bounce_redirect );

接下来,它需要提供Angular应用程序。但是,它需要 cas session 。我们定位'/home',但它可以是另一条路径,例如'/'或任何有你的路径。

app.get('/home', cas.bounce, express.static(pathToAngularAppDirectory);

最后,您可能会拥有要保护的REST API端点:

app.use('/api', cas.block, appRoutes);

现在,发生了什么。请求来自浏览器。它命中'/home'路线。由于浏览器是首次访问,因此没有设置身份验证标头。它将点击cas.bounce()块并重定向到/login路由。一旦它到达那里,它将被提供login.html *。

您在此处输入登录数据并点击“登录”按钮 - 页面将被提交,cas中间件对用户进行身份验证 - 将会话数据和所有内容设置为浏览器。浏览器会用它来解决这些问题(注意我说的是浏览器,而不是Angular)。 它还会将用户重定向回“/ home”页面。

现在您的浏览器会话信息,因此它会获得路由传递,获取Angular文件,应用程序正常启动。一切都很酷。

还有一个案例你可能想从Angular处理。

假设您的会话已过期。浏览器保持打开状态。用户重新访问该页面 - 一切都很酷,cas.bounce会将用户重定向回登录表单。

但是如果用户只是点击你应用中的“刷新”怎么办?然后Angular的HttpClient获得401响应(根据节点模块docs)。您可以使用简单的http interceptor来执行window.location.reload()或类似的操作(基本上是整页重新加载,而不是客户端导航),并且在页面重新加载时,您的应用会陷入cas.bounce因为它试图重新加载/未经验证的家。