【问题标题】:Trade username and password for a token交易代币的用户名和密码
【发布时间】:2016-09-16 16:24:33
【问题描述】:

我有一个 Node.js 应用程序,它在 MongoDB 前面提供了几种不同的路由。我需要确保只有经过身份验证的请求才能访问这些路由。

理想情况下,我想设置它,以便用户名和密码进入 API,并在响应中返回一个令牌。我不介意自己管理 MongoDB 中的令牌,但我需要确保我们返回的令牌可以发出经过身份验证的请求。我不想强迫用户每次都发送他们的凭据,只是发送令牌。

我已经阅读了几天有关护照的内容,目前有 307 策略。我在这里描述的是哪种策略?

【问题讨论】:

  • 您可以创建自己的自定义策略
  • 是的,谢谢@Sumeet 听起来可能没有解决这个问题的策略。这个问题有一些有用的信息:stackoverflow.com/questions/17397052/… 但这建议最初使用“本地策略”进行身份验证,然后手动生成令牌,最后使用 passport-http-bearer 策略来检查令牌。

标签: node.js mongodb passport.js


【解决方案1】:

我在这里描述的是哪种策略?

您正在描述Local Strategy

根据他们的描述:

此模块允许您在 Node.js 应用程序中使用用户名和密码进行身份验证。

我不想强迫用户每次都发送他们的凭据,只发送令牌。

Passport auth 策略只是提供了对用户进行身份验证(或简单来说是登录)的各种方法,而不是如何保持该登录。登录持久性通常由用户会话完成。

解决此问题的一种方法是将本地策略与express session middleware 结合使用。两者的结合可以实现一个相当简单的身份验证系统,该系统需要用户登录一次,然后保持会话。

在典型的 Web 应用程序中,用于验证用户身份的凭据只会在登录请求期间传输。如果身份验证成功,将通过用户浏览器中设置的 cookie 建立和维护会话。

每个后续请求将不包含凭据,而是包含标识会话的唯一 cookie。为了支持登录会话,Passport 将对会话中的用户实例进行序列化和反序列化。

PassportJS docs举例说明如何实现。

【讨论】:

  • 谢谢@nem,但这不要求每次请求都发送用户名/密码吗?
  • @SSH查看我的编辑。如果你愿意,我可以添加代码示例。
【解决方案2】:

为此,您应该更喜欢为登录生成 JWT 令牌,然后使用该令牌始终对用户操作进行身份验证。

实现这种令牌登录系统需要以下步骤

  1. 登录时生成令牌
  2. 验证何时提供令牌并使用解码数据来识别用户

使用适当的中间件来保护您的 api。

您可以点击以下链接:

https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

【讨论】:

    猜你喜欢
    • 2022-06-23
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 2013-05-14
    相关资源
    最近更新 更多