【发布时间】:2016-11-18 05:21:45
【问题描述】:
我了解 Passport.js 的 Basic 和 Digest 认证的区别,但是本地策略和 Basic 或 Digest 的区别是什么?在所有三个中,您都输入用户名和密码。基本策略是一种用户和密码身份验证吗?请澄清。
【问题讨论】:
标签: passport.js
我了解 Passport.js 的 Basic 和 Digest 认证的区别,但是本地策略和 Basic 或 Digest 的区别是什么?在所有三个中,您都输入用户名和密码。基本策略是一种用户和密码身份验证吗?请澄清。
【问题讨论】:
标签: passport.js
如果我理解正确的话,Passport.js 中的 Local、Basic 和 Digest 策略之间的区别是微妙但重要的。这是纲要:
本地 (passport-local)
Passport 的本地策略是一个简单的用户名和密码认证方案。它从用户名(或其他标识符)中找到给定用户的密码并检查它们是否匹配。本地策略与其他两种策略的主要区别在于它使用持久登录会话。此策略应在 SSL/TLS 上使用。
基本 (passport-http)
Passport 实施的基本策略看起来与本地策略几乎相同,但有一个细微差别。基本策略是与架构无状态的 API 端点一起使用。因此,会话不需要,但可以使用。此策略还应使用 SSL/TLS。会话标志可以这样设置:
app.get('/private', passport.authenticate('basic', { session: false }), function(req, res) {
res.json(req.user);
});
摘要 (passport-http)
摘要策略与其他两种策略略有不同,因为它使用特殊的挑战-响应范例以避免以明文形式发送密码。当 SSL/TLS 不可用时,此策略将是一个很好的解决方案。
这是一篇关于基本与摘要的好文章:How to Authenticate APIs
注意:所有三种策略都使会话支持可选。两种 passport-http 策略允许您设置会话标志,而 Passport docs 这么说,关于 passport-local 策略:
请注意,启用会话支持是完全可选的,但建议大多数应用程序使用它。
【讨论】:
authentication标头进行身份验证见github.com/jaredhanson/passport-http/blob/master/lib/…
authorization 你的意思是标题
如果您使用 Passport Local 策略: - 会话已建立,因此您不必针对每个请求发送凭据; - 默认情况下,用户名和密码在“用户名”和“密码”标题中提供;
如果您使用 Passport Basic/Digest 策略: - 未使用会话,因此您必须在每次 API 调用时提供凭据; - 用户名和密码/哈希包含在“授权”标题中;
【讨论】: