【问题标题】:Node.js RESTFUL service self built authNode.js RESTFUL 服务自建认证
【发布时间】:2015-09-06 20:01:20
【问题描述】:

我正在通过 HTTPS 在我的 Node.js 应用程序上创建 REST 服务。我不想让任何人使用这些 REST 服务,除非他们是经过身份验证的用户,因此在向这些服务发出请求时我需要一种身份验证方法。

我在网上阅读过,似乎带有护照的 OAuth2 是一个很好的解决方案......但是我想出了一个我认为不需要持久性令牌的更简单的解决方案,我想知道是否有我的解决方案有什么大漏洞吗?

我的解决方案是在服务器上保存一个秘密。当用户登录并且我对他们进行身份验证(或注册)时,我会对用户用户名进行哈希处理,为其添加时间戳,并使用我的密码对其进行编码以创建“访问令牌”。由于时间戳,此令牌将始终在一个小时(或一天或多长时间......)后过期。

一旦用户拥有了这个访问令牌,他们只需在请求查询中传递这个令牌,连同他们的用户名,他们就可以使用服务器的 REST API。鉴于当我使用服务器密码解码令牌时,它等于用户名。

此方法也不需要我保留任何令牌信息(刷新令牌、到期时间等)。我也不需要额外的模块,例如护照和 oauth 模块来实现我的解决方案,看起来非常紧凑。

我的问题是(我对安全性非常陌生),假设服务器机密永远不会被发现,这个解决方案对于旨在为移动应用程序提供服务的服务器(仍然可以通过 REST 客户端访问)是否足够好?

【问题讨论】:

    标签: node.js rest security authentication oauth


    【解决方案1】:

    欢迎来到 SO!

    任何有关安全性问题的默认答案:不要尝试自己做:)

    听起来您正在重新发明签名访问令牌方案,该方案正在编纂为 JSON Web 令牌 (JWT)。我强烈建议您改用此方案。

    不要在 GET 参数中传递数据,因为它可能会被缓存或记录在某处(使自己容易受到中间人攻击)。您应该将令牌存储在HttpOnly; Secure cookie 中,以防止 cookie 暴露给非安全通道。

    我已经写了一些关于 JWT 以及如何在 Web 浏览器中使用它们的深入文章:

    Create and Verify JWTs With Node.js

    Build Secure User Interfaces Using JSON Web Tokens (JWTs)

    免责声明:我在 Stormpath 工作。我们是一个用户认证服务,我们可以为您解决所有这些问题。听起来您正在使用 Node,为此我们有很棒的库,可以让您在几分钟内满足您的所有用户需求 :)

    我还是nJwt 的作者,这是一个 Node.js 库,它让正确使用 JWT 变得非常容易。

    希望这会有所帮助!

    【讨论】:

    • 嗨!很好的回应,我最终使用 jwt-simple 创建令牌并根据我的服务器机密对此令牌进行解码!我不担心浏览器缓存令牌,因为这些令牌每小时都会过期。此外,我通过 HTTPS 连接提供所有这些信息(这不会防止 MITM 攻击吗?)如果不是,我肯定会考虑将这些令牌存储在安全 cookie 中(如上所述)。
    • 我对缓存的评论更多是关于后端服务器缓存或代理缓存。许多系统还记录 URL(例如监控和分析系统),因此您也会将令牌暴露给这些系统。
    猜你喜欢
    • 1970-01-01
    • 2012-05-10
    • 2011-04-05
    • 2011-01-02
    • 2012-11-06
    • 2011-08-26
    • 2013-07-05
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多