如何为基于 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 规范并为令牌交换赠款,或者不太复杂的方法可以是:
当用户使用 username/password 进行身份验证时,然后将它们发送到生成令牌(比如 255 个字符)的服务,由用户存储令牌。您可以在这里为不同的 auth/rights 提供不同的授权,但我假设用户是用户。
添加护照持有人策略,该策略实质上是查找令牌,检查其有效性
添加策略以调用 passport.authenticate('bearer'... 以检查您的令牌 - 然后它将查看授权 header 以获取不记名令牌根据数据库检查并找到合适的用户 - 否则拒绝(401,return 登录等)
要求对您要保护的所有方法(登录除外)执行上述策略
任何受保护的方法都需要具有有效承载令牌的身份验证 header,例如Authorization: bearer kj233kj42kdskfksaj_lots_of_letters_and_numbers_ak3k29asd32kad
希望对您有所帮助。
这是一个开放式问题,所以我很抱歉。我会尽力保持具体。
我有一个基于 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 规范并为令牌交换赠款,或者不太复杂的方法可以是:
当用户使用 username/password 进行身份验证时,然后将它们发送到生成令牌(比如 255 个字符)的服务,由用户存储令牌。您可以在这里为不同的 auth/rights 提供不同的授权,但我假设用户是用户。
添加护照持有人策略,该策略实质上是查找令牌,检查其有效性
添加策略以调用 passport.authenticate('bearer'... 以检查您的令牌 - 然后它将查看授权 header 以获取不记名令牌根据数据库检查并找到合适的用户 - 否则拒绝(401,return 登录等)
要求对您要保护的所有方法(登录除外)执行上述策略
任何受保护的方法都需要具有有效承载令牌的身份验证 header,例如
Authorization: bearer kj233kj42kdskfksaj_lots_of_letters_and_numbers_ak3k29asd32kad
希望对您有所帮助。