在我的 Spring 应用程序中,我计划通过向用户的电子邮件地址发送“魔术登录链接”来从身份验证过程中删除密码。然而,在这个问题中, Rob Winch(Spring Security 的负责人)说:
请注意,在允许从电子邮件中的链接登录方面,您知道自己在做什么。SMTP 不是一种安全协议,因此依赖拥有电子邮件作为身份验证形式的人通常是不好的。
真的是这样吗?如果是这样,那么发送密码重置链接如何更安全?使用魔术链接登录与发送魔术链接重置密码不是一回事吗?
在我的 Spring 应用程序中,我计划通过向用户的电子邮件地址发送“魔术登录链接”来从身份验证过程中删除密码。然而,在这个问题中, Rob Winch(Spring Security 的负责人)说:
请注意,在允许从电子邮件中的链接登录方面,您知道自己在做什么。SMTP 不是一种安全协议,因此依赖拥有电子邮件作为身份验证形式的人通常是不好的。
真的是这样吗?如果是这样,那么发送密码重置链接如何更安全?使用魔术链接登录与发送魔术链接重置密码不是一回事吗?
单独的魔术链接不一定是坏事。512 位完全随机的值不会比 512 位私钥更容易猜到。一般来说,在合理的时间后过期被认为是一种很好的做法。一个好方法 - 也避免存储数据库条目是在 url 中嵌入令牌数据并使用私钥对其进行签名。IE
site.com/login?type=login&user=[username]&expires=[datetime]&sig=[signature of other parameters].
然而,电子邮件作为一种传输机制并不安全。
默认情况下,SMTP 提供的拦截保护非常少。服务器之间的流量可能会被加密,但不能保证。即使使用加密,它仍然经常可以在连接中间进行操作(加密与身份验证不同)。
如果是这样,那么发送密码重置链接如何更安全?
它不是。这就是为什么一些服务会在发送链接之前(或点击链接之后)要求您提供一些额外的证明。
这里存在三个问题。
如果您通过电子邮件发送带有秘密登录令牌的链接,那么它们应该是一次性的并且很快就会过期。