如何为基于 Express 构建的 REST API 实现 CAS 身份验证

How to implement CAS authentication for REST API built on Express

这是一个开放式问题,所以我很抱歉。我会尽力保持具体。

我有一个基于 Express 的 REST API(实际使用 Sails.js)。在前端,我有一个由非常轻量级的 Express 应用程序提供的 Angular2 应用程序。前端向后端发出 HTTP 调用 (API)。

没有通过 CAS 进行身份验证,任何人都不能访问前端或后端。我使用 cas-authentication 模块在前端实现了 CAS 身份验证——没问题。但是,API仍然没有受到保护。

我正在想办法保护后端。我已经实施了 CORS 保护,它只允许来自白名单域的请求。但是,这似乎还不够。

我假设我需要将身份验证令牌与每个 REST 请求一起发送到后端。我只是不知道如何获得该令牌。

如有任何正确方向的推动,我们将不胜感激。

为了保护您的无状态 API,您可以使用 passportjs 和 passport-http-bearer 策略实施不记名令牌。然后设置(或实现您自己的)分发令牌的服务(参见 https://github.com/jaredhanson/oauth2orize)。您可以实施完整的 oauth2 规范并为令牌交换赠款,或者不太复杂的方法可以是:

  1. 当用户使用 username/password 进行身份验证时,然后将它们发送到生成令牌(比如 255 个字符)的服务,由用户存储令牌。您可以在这里为不同的 auth/rights 提供不同的授权,但我假设用户是用户。

  2. 添加护照持有人策略,该策略实质上是查找令牌,检查其有效性

  3. 添加策略以调用 passport.authenticate('bearer'... 以检查您的令牌 - 然后它将查看授权 header 以获取不记名令牌根据数据库检查并找到合适的用户 - 否则拒绝(401,return 登录等)

  4. 要求对您要保护的所有方法(登录除外)执行上述策略

  5. 任何受保护的方法都需要具有有效承载令牌的身份验证 header,例如Authorization: bearer kj233kj42kdskfksaj_lots_of_letters_and_numbers_ak3k29asd32kad

希望对您有所帮助。