如何实现基于Express的REST API的CAS认证

问题描述:

这是一个开放式问题,所以我很抱歉。我会尽我所能保持它的具体。如何实现基于Express的REST API的CAS认证

我有一个建立在Express上的REST API(实际上使用Sails.js)。在前端,我有一个由一个非常轻量级的Express应用程序提供的Angular2应用程序。前端对后端(API)进行HTTP调用。

没有人应该能够访问前端或后端没有通过CAS认证。我使用cas认证模块在前端实现了CAS认证 - 没有问题。但是,API仍然不受保护。

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

我假设我需要发送一个身份验证令牌以及每个REST请求到后端。我只是不知道如何得到这个令牌。

任何在正确的方向微调将不胜感激。

为了保护您的无状态API,您可以使用passportjs和passport-http-bearer策略实施持票人令牌。然后设置(或实施您自己的)一个提供令牌的服务(请参阅https://github.com/jaredhanson/oauth2orize)。您可以实现完整的oauth2规范并交换授予令牌的方式,或者采用较简单的方法:

1)当用户使用用户名/密码进行身份验证时,然后将它们发送到生成令牌(如255个字符)的服务,用户存储令牌。您可以在这里获得不同的授权,以获得不同的授权/权限,但我假设用户是用户。 2)添加护照承载策略,实质上查找令牌,检查它的有效性 3)添加一个策略来调用passport.authenticate('承载'...检查您的令牌 - 它将查看授权标头然后拒绝(401,返回登录等) 4)要求所有要保护的方法的上述政策(登录除外) 5)任何受保护的方法将需要一个具有有效承载令牌的auth头部,例如授权:持票人kj233kj42kdskfksaj_lots_of_letters_and_numbers_ak3k29asd32kad

我希望能帮助您入门。

+0

谢谢!我最终做的是前端服务器在身份验证时发出JWT。智威汤逊由后端共享的秘密密钥签署。每个到后端的请求都包含标题中的JWT。然后,后端可以使用该密钥进行解密并验证请求用户的身份。这是有效的,因为我不需要将API提供给第三方,所以可以让2台服务器共享一个密钥。 – Faris

+0

是的智威汤逊也很棒,真棒。现在我的大部分API都需要为移动应用提供服务,而且我不想在手机上存储秘密。你是否使用jwt的包装或自己的代码? –