1. Tokens should expire after no more than five minutes.
2. Embed a 1-pixel image in an HTML-based e-mail also contains the token. When the e-mail is first opened, the server associates the IP address from the e-mail with the token. Only subsequent authentication requests for that token/IP address pair pass validation.
3. Log IP addresses used by an account. Additional new IP addresses outside the usual geographical area (GeoIP) should fail validation. This assumes that the first person to click the link is the intended recipient.
Any other ideas?
This will cover almost everybody, it will have almost no false positives (forwarding an email to somebody who uses the same browser on the same computer is the only one I can think of off the top of my head), and the fallback of requiring explicit authentication in other cases seems acceptable.
I expect all email providers to follow Google's lead on that tbh because it's really quite good.
3 is a bit of a problem with residential broadband as IP address get re-assigned a fair bit.
One that I find a bit annoying is clicking a link to reset a password, then having to login again with that same password. Seems a bit unnecessary.
The problem is exacerbated by the fact that I'm usually checking those emails on the phone where it is often a PITA to enter passwords.
From a developer perspective I think unless you are comfortable with a 1-2 week token* (or longer depending on customer base) you could actually decrease conversion rates because you remove the features consistency.
Ex: a user is cleaning out emails, starts with the most recent and works their way back. Opens OkCupid message from 3 weeks ago because it was interesting, but the link doesn't work.
*I would appreciate further insight as to what is a normal length of time for tokens to be valid and the impact increasing the token expiration time might have on security.
Or if the user visits an old email without looking at a new email first, the user can just log in as usual.