1. Email delivery latency: depending on the service you use, the time it takes to deliver emails to the user can vary. Worst case I encountered was up to 20 minutes delay when there were issues with Mailgun.
2. Usability: you have to leave your current app and switch to your mail client. You may be on a device where you don't have a mail client installed at all, so you have to provide a password login option as well.
3. The sign in dialog gets more complicated and it's hard to explain to users how it works as it is not all that common. This also had effects on sign up/sign in dialog design which we found to have a negative impact on conversion rates.
E-mail is NOT INSTANTANEOUS. It was never meant to be. It happens to arrive quickly for most people most of the time, but you should never, ever, base a service on that.
Many systems have greylisting in place: a new sender gets a 4xx reply, and is allowed through only on subsequent retries after a pre-set time period. This is often as much as 30-60 minutes. It's a good approach to reduce spam, it turns out a lot of spamming software does not bother to retry, or doesn't want to incur the cost.
So, if you try this OTP-over-Email approach, you end up with frustrated customers, who 1) have to wait up to 60 minutes, 2) their OTP doesn't work, because you expired it after 5 minutes.
It's terrible. Don't do it.
By the time I finally get to my email, the link is expired and I just give up.
Consequently, I almost never use that service.
With password managers built into all modern browsers, casual users (which, lets be honest here, are by far the most of the web users) do not have to worry about typing passwords. Security be damned. If it is not invisible to the user, they will reject it.
Imagine that.
Also, having such a critical part of your system depend on email delivery and access? Looking at most frontend development practices I understand the blindside/YOLO attitude these days but it's still a bad idea anytime of the day.
1) Something you know (e.g. a password)
2) Something you have (e.g. a token)
3) Something you are (usually biometric authrentication, like your fingerprint, a retina scan...)
Real OTPs fall in the second category, because you have some device/application that is able to generate the same OTP code as the server handling authentication without communicating with the server. Now there are some popular solutions that are still being called OTPs that instead of something you have is something that is sent to you, like SMS OTP. This isn't just quibbling, because sending something each time authentication is needed, opens up the possibility for some attacks that wouldn't be possible with proper OTPs, e.g. SIM swapping. So to answer you question:
- Just having to click on a link sent via email has the problems outlined in other comments
- having to both enter a password and having a link sent to your email address is safer than just enter a password, but
- having a true OTP, like the TOTP standard, is what provides the best security (in the category of OTPs, I'm not talking about protocols like FIDO2 and similar, because I don't know them).
EDIT: formatting
I won't try the one-time-link approach again unless the app's specific use case makes passwords extra painful.
Related, I've consulted for a company that downloads and caches every link in every email passing through their corporate server.
1. Browser visits a site that needs authentication. 2. Browser checks if there's already an existing client cert. 3. If not, browser generates one. 4. Browser uses it in the SSL handshake, resulting in the user being signed in without passwords, cookies, email links, etc.
Compared to passwords in terms of security: you have to consider that the client visiting the link might not be the client with the session being authenticated, at which point there might be confusion over multiple authentication requests of mixed legitimacy around the same time. I don’t know how this is typically solved.
I think better than either for security and usability is passwordless WebAuthn with a local factor (e.g. Touch ID for Apple devices, or even a master password for a simple improvement over existing password-unlockable saved passwords), if implementing something outside the status quo.
(edit: starbugs’s point about latency is also very important.)
https://www.w3.org/TR/capability-urls/
There are some problems though and the authentication could be called weak.
Problems is that URLs aren't regarded as secret and the irrational tendency to log everything doesn't help, as these OTP will be visible after a while.
So these OTP have to be invalidated at some point as they tend to become revealed. If expiration is necessary, you still need some form of auth to regain access.
OTP login is multiple steps, involves me doing a copy/paste (or remembering the code), and requires a mandatory delay while I wait on the email. If I wanted to login incognito, or in a different browser, I may have to copy/paste the URL etc.
A better question is why anyone uses them at all given how bad they are. I've stopped using at least one site because it exclusively uses OTP links.
For example, I've been locked out of my Patreon account for the last couple of weeks since Gmail decided to return 550 errors (address doesn't exist) [1] and they require an email to log in when the IP address changes. Most likely my email address has been added to the suppression/bounce list of Mailgun.
Working in IT with a direct day-to-day relationship with end users, passwords are the bane of all existence.
You say email delivery or sms is slow, but how often is it slow for users? Data on this? I personally have never seen a significant delay for an OTP code to either my inbox or my email (Google & Verizon). I have seen users that have an old email configured that is no longer active, but, oh, 80% of the time their cell number is a backup, so resolution is easy enough for them.
You say it’s insecure? Really? So the more than 30% of your users that have their password written either on paper on their desk (most commonly a sticky note or in a small notebook just hanging out on the paper pile) or in an unencrypted note taking app is somehow more secure?
You say it’s inconvenient? What? It can’t be more inconvenient than having to go through a password reset process once a week (which believe it or not, a TON of end users do).
Is any one actually measuring this or is this as an complete echo chamber of nerds that are good with password managers? Because I can tell you with certainty there’s a whole demographic, generation of humans out there where single token logins (backed up by multiple OTP at certain time or event trigger intervals) is BY FAR AND AWAY A BETTER WAY!
You want an example of who I think has this perfected: Affirm.com
Security and comfort are sometimes at opposing ends.
1) it’s unreasonable to expect people to remember so many passwords. I forget passwords all the time. Password manager isn’t that great since it doesn’t work cross device. 2) even with OTP, email is slow. Also email can distract and adds friction 3) federated auth such as google/GitHub auth is great. I usually get in in a single click.
I’d say if you want to prioritize you prolly get the best bang for buck in following order
1) federated auth - no need to store passwords, no forgot password flows. It assumes your audience is okay with google/GitHub/Twitter etc auth and has an account in one of the services.
2) email/pwd. More complications but benefit is it depends on no 3rd party.
3) one time link in email. The benefit is user doesn’t need to remember password. It does depend on email which adds some friction.
Note: you can have all 3 options and let user choose for maximum conversation. The tradeoff is more work on your side.
Life is all about tradeoffs. No one right or wrong solution.
See https://www2.deloitte.com/content/dam/Deloitte/ie/Documents/... for more information on how cutting hairs on latency can dramatically affect an application's adoption rate
I still like the OTP process, but it is more hassle than using the password manager.
If your login mechanism sets a cookie after they verify the link then they can continue to be logged in for 3 months or however long you want. This is similar to what you would do with a password.
Also the site type and your audience makes a big difference. I wouldn't do it on a site where folks aren't technical.
But for example what about an ecommerce site where customers need to register an account + put in credit card details to place an order and then they get access to digital goods?
In the above case the lack of password is a benefit because it simplifies the payment form. Now they only need to put in an email address + card details.
And for getting access to what they purchased a slight delay isn't the end of the world. You could even give them access to it immediately in some type of unverified way (limited features until they verify). Also it's a slight deterrent for account sharing.
Any link that ends up in a browser address bar should be treated as public.
And no, it doesn't matter if you use HTTPS. Ways to leak it are many, but the gist is that it's treated as "meta-data" and, rightly or wrongly, subject to much lower expectations of privacy. A recent scandal was that several common browser extensions collect this meta-data and sell it to marketing companies.
Which marketing companies offer searchable subscriptions (for hefty prices, true, this isn't a $9.99 service), where somebody could for example search for "yourcompany.com", or even worse, "yourcompany.com/authernticate?token=". Yeah, meta-data.
Regrettably, the issues with passwordless email/SMS login mean that for now, if there's no OAuth provider you can/want to use, the ol' password is probably still the best way to go.
I am surprised to see that so many people have issues with email delivery. Though email delivery can be delayed and in theory there are no guarantees.
Have you considered using SMS or a 2FA App like Duo? They should be near instantaneous.
The idea of sending this over telegram or signal is a good approach though the costs of Whatsapp messaging would be prohibitive. Even SMS will not work at scale. So really boils down to 2 things
(1) Speed - can you service live with delays or provide an alternate? (2) Cost - this cannot be tied to the per message cost like transactional or promotional email/SMS. A different pricing model help.
[1] - https://notion.so
I see passwords as reducing security (we have a low-security product so people can reset with an email, so security-wise, the upper bound is your email security), hence we used it. But people prefer the "remember the secret" shortcut!
Nah, just let a password manager handle it.
email is still mostly sent as plain text over the internet, that's certainly a downside.
email delays haven't been a problem in practice for us.
we also send users notification emails with links going directly to the right page, automatically logging the user in. i would like that from other services as well, as i'm browsing with ephemeral browser containers. having a clean browser environment triggers some website (eg github) to verify my login with a unique code sent by email. that indicates email delays aren't a showstopper in practice at big scale either.
For example, some time ago made a Slack bot with a web dashboard. The authentication method was based on introducing your Slack username and the bot would send you an OTP. The latency problem didn’t exist here.
Wonder what the impact of that has on both of them?
Finally, if you ever loose your email password, you won't be able to access any of your accounts anymore...
Where email appears as a push notification on an imap idle configured email account, email can be far more unreliable, even with the best transactional email services.
What about a use case when it is inconvenient to create another password for a new user base at a company and this way you have users without calling support all the time.
Many companies in China use this way. does there have any possible exploit/disadvantage of this method?
P.S. authenticators have their own problems too just like E-mail. :D
No complaints with it.
Everyone has an HSM in their pocket these days. The fact that we are having these discussions at all is ridiculous.
Unfortunately that also means that if I click the link by mistake the bad actor now has full access to my account. All just a misclick away.