40

我了解 Passport.js 的 Basic 和 Digest 认证之间的区别,但是本地策略和 Basic 或 Digest 有什么区别?在所有三个中,您都输入用户名和密码。基本策略是一种用户和密码身份验证吗?请说清楚。

4

2 回答 2

65

如果我理解正确的话,Passport.js 中的 Local、Basic 和 Digest 策略之间的区别是微妙但重要的。这是纲要:

本地护照本地

Passport 的本地策略是一个简单的用户名和密码认证方案。它从用户名(或其他标识符)中找到给定用户的密码并检查它们是否匹配。本地策略与其他两种策略的主要区别在于它使用持久登录会话。此策略应在 SSL/TLS 上使用。

基本护照-http

Passport 实施的基本策略看起来与本地策略几乎相同,但有一个细微差别。基本策略是与架构无状态的 API 端点一起使用。因此,会话不是必需的,但可以使用。此策略还应使用 SSL/TLS。会话标志可以这样设置:

app.get('/private', passport.authenticate('basic', { session: false }), function(req, res) {
  res.json(req.user);
});

摘要护照-http

摘要策略与其他两种策略略有不同,因为它使用特殊的挑战-响应范式以避免以明文形式发送密码。当 SSL/TLS 不可用时,此策略将是一个很好的解决方案。

这是一篇关于 Basic vs. Digest: How to Authenticate APIs的好文章

注意:所有三种策略都使会话支持成为可选的。两种 passport-http 策略允许您设置会话标志,而 Passport文档说明了这一点,关于 passport-local 策略:

请注意,启用会话支持是完全可选的,但建议大多数应用程序使用它。

于 2014-01-02T17:36:40.623 回答
4

如果您使用 Passport Local 策略: - 会话已建立,因此您不必在每个请求上发送凭据;- 默认情况下,用户名和密码在“用户名”和“密码”标题中提供;

如果您使用 Passport Basic/Digest 策略: - 未使用会话,因此您必须在每次 API 调用时提供凭据;- 用户名和密码/哈希包含在“授权”标题中;

于 2015-01-17T19:50:31.723 回答