繁体   English   中英

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

[英]How to implement CAS authentication for REST API built on Express

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

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

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

我想弄清楚如何保护后端。 我已经实施了 CORS 保护,只允许来自列入白名单的域的请求。 但是,这似乎还不够。

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

任何朝着正确方向的推动将不胜感激。

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

  1. 当用户使用用户名/密码进行身份验证时,然后将它们发送到生成令牌(例如 255 个字符)的服务,按用户存储令牌。 对于不同的身份验证/权限,您可以在此处获得不同的授权,但我假设用户是用户。

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

  3. 添加一个策略来调用passport.authenticate('bearer'...来检查你的令牌——它会查看不记名令牌的授权标头,然后根据数据库检查它并找到合适的用户——否则拒绝(401,返回到登录等)

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

  5. 任何受保护的方法都需要一个带有有效承载令牌的 auth 标头,例如Authorization: bearer kj233kj42kdskfksaj_lots_of_letters_and_numbers_ak3k29asd32kad

我希望这有助于您入门。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM