【问题标题】:How to implement CAS authentication for REST API built on Express如何为基于 Express 构建的 REST API 实现 CAS 身份验证
【发布时间】:2017-06-02 17:10:36
【问题描述】:

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

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

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

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

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

我们将不胜感激。

【问题讨论】:

    标签: node.js angular express sails.js cas


    【解决方案1】:

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

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

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

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

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

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

    我希望这可以帮助您入门。

    【讨论】:

    • 谢谢!我最终做的是前端服务器在身份验证时发出 JWT。 JWT 由后端共享的密钥签名。对后端的每个请求都在标头中包含 JWT。然后后端可以使用该密钥解密并验证请求用户的身份。这是可行的,因为我不需要将 API 提供给第三方,因此可以让 2 个服务器共享一个密钥。
    • 是的,JWT 也很好用;惊人的。这些天我的大多数 API 都需要为移动应用程序提供服务,我不想在手机上存储秘密。您是使用 jwt 包还是自己编写代码?
    猜你喜欢
    • 1970-01-01
    • 2012-07-15
    • 2018-07-11
    • 2015-04-20
    • 2015-05-31
    • 1970-01-01
    • 2017-11-27
    • 2011-04-28
    • 2016-07-16
    相关资源
    最近更新 更多