Magic Links Have Rough Edges, but Passkeys Can Smooth Them Over
rmondello.com
rmondello.com
> On this blog I speak only for myself as someone experienced in usable security and website authentication.
This caveat near the top speaks to my point, if you're a developer and you understand what an SSH key is, you'll take to Passkeys no problem. But if you aren't, there are many foot guns abound and vendor lock-in you won't notice until it bites you.
I work for an auth company, I use a Yubikey and Passkeys all the time, in a business context where there is an IT admin to go to when there is a problem, I think Passkeys will do great. They'll really improve the average security posture of an organization.
But I would dread having to try and recover a Passkey with Google, who would I even talk to? I just had to explain what a VPN was to my parents, I would not be excited to try and explain to them how Passkeys work.
That's not what this blog post is about. This blog post is not about using a passkey to login to your email.
This blog post is about using a passkey to login to a website (404 Media) that currently supports login via "magic links," i.e. instead of passwords, they always send you a "forgot my password" link, which you click on in your email.
If you currently login to 404 Media with a magic link, and then decide to login to 404 Media via passkey, and you lose your passkey, you can just get a new magic link sent you via email and reset your passkey, or, if you want, you could just skip the passkeys and go back to always using magic links.
Using passkeys to login to your email itself is a whole different ball of wax. Gmail does not have a simple "forgot my password" email that it sends. (That would be pointless if Gmail is your only email address!)
The "forgot my password" flow for Google/Gmail can involve a bunch of factors, including backup email addresses, backup recovery codes, recovery contacts, SMS, push notification to other apps you've logged into. Google doesn't document all of the factors they consider, and neither do any of the other major email providers.
I get it: it would be scary to login to Google via passkey if Google is your passkey manager, especially because there's no way to export a passkey from one passkey manager to another. Can you trust Google's recovery system?
That's a hard problem for Google, but it's a trivial problem for 404 Media. They just send you a magic link, and rely on Google to keep your email secure.
And, let's face it, most of us run sites that are much more like 404 Media than they are like Google.
an entitled dev from apple who shops at Albertsons just like passkey with password-reset-as-login-flow. nothing to see here.
The average user of a service will be worse off for passkeys. Something as innocent and common as losing a phone could result in complete account lockout.
Magic links offer the best compromise between security posture, effort to implement for developers, and easiness for users. It's not the perfect solution, but its the best at the moment across all dimensions.
This is the biggest misconception I see repeated about passkeys constantly. Account recovery flows generally do not change at all. Passkeys replace passwords, they change nothing at all about account recovery. If you forget/lose your password or your passkey, you go through the reset flow and create a new one.
Or do you remember a 20+ random character string for each site and thus do not need a password manager?
2FA does make this more complicated and in my case my password manager did not have 2FA, but TOTP with backup codes does let you store those backup codes somewhere else, while none of the passkey implementations I have seen (Fastmail, Amazon and Toggl) have an equivalent to the backup codes for TOTP. The fact that they still support password auth is probably their failsafe here, but this assumes that password auth continues to exist, which is contrary to to the goals of passkeys.
I can't speak to other passkey managers, but both Google and Apple have pretty thorough account recovery flows that work even if you lose 100% of your devices.
So yeah I think it would be way more surprising to me if this particular flow was bad. If anything it’s likely to be one of their _best_ flows, given their scale and how critical of a flow it is.
And given that they love to track users to serve them ads, it’s also very much in their (capitalist) interest to make sure users don’t get locked out of their accounts.
Use a pair of yubikeys.
BTW, all major email providers have a flow to allow you to recover access to your account.
When you enable passkeys it doesn’t suddenly deactivate every other way of logging in.
The misconception here is your setting up a strawman.
For some reason, my primary account was not subject to the same probablistic lockout, maybe because it had a more constant record of use, or maybe because it was a GApps account.
same as trying to recover a password: You go through the account recovery workflow.
My opinion on passkey is that they are a wonderful tool to speed up the authentication process with sites in some cases (which turns out to be most cases). Rather than typing your password (hopefully on the correct site...) and then sometimes confirming with a magic link or a 2FA code, all you do is use your platform native's authentication conformation method (face recognition, fingerprint, PIN code, whatever) and you're done. This works independently of which site you're on.
Just as with password managers: If you use the OS built-in solution, you're locked into a specific platform (though I admit that with passwords it's at least possible to move them manually, albeit super painful if the passwords are secure), so if you're using multiple platforms concurrently use a password manager that supports all your platforms - most if not all password managers these days support passkeys.
For all breakages related to passkeys, the same applies as with passwords: You use the account recovery flow (which often is the weakest link on any site).
As such, passkeys feel like a wonderful shortcut with even slightly improved security (you can't present a passkey to the wrong site) in the default case.
1Password allows me to authenticate with my passkey in Safari (my default browser), Chrome and Firefox on macOS and Windows.
the site knows the key provider, and it's a matter of time the only accept the three big ones "for security".
But at least they won’t get phished anymore! That’s a huge win.
Those are implementation details that they need not to care about. Password hashing is about mitigating the consequences of you the account provider screwing up. I know, technology and finance are special, in that the more a service provider fucks up, the more it is your fault somehow (see: "identity theft") - but most people didn't get that memo.
They’re still having a hard time grasping the concept of 1 password per site. Or that password do not need to be memorable or the name of their pet plus their birth date. So they fight it.
Often they call me saying some service is broken, emails aren’t working, etc, and I ask for their password and they show me a list of account passwords in their notepad app, bc they were trying to replicate 1 password in their minds, because they absolutely do not trust what they do not understand.
I for one do not like magic links, prefer regular otp, especially because I can add it to my 1Password. I don’t like magic links because it adds an extra step of opening my email app, clicking a link and opening a new tab. It breaks my flow, so I tend to avoid services with magic links unless it’s only for account recovery.
Passkeys, I have skimmed the implementation, and flows, but I can’t get over the lock in and lock out potential.
So going back to fatigue, if my relatives are still in the password manager training phase, I’m definitely not going to confuse them with magic links, much less with passkeys. I will wait, and wait, and wait, until this all settles down and we have a gold standard, and everyone falls in line. Average users do not need the latest, “safe enough” is enough for them.
And b) I don't understand them. If I don't understand them what chance does the average non-nerd have? I probably could understand them, if I bothered to look into the details of how they work, but I really don't want to have to do that and normal people won't either. Nobody needs to do research to understand passwords or email login links (at least at a basic level).
I predict they will be abandoned in 10 years.
I wonder if a better solution is just to accept email-is-authority and make the magic link flow more seamless. Imagine if you could link your email client and your web browser closely together so that every site that offered a magic link "just worked". You click a button, it emails you, your email client silently notifies the web browser and deletes the email, and then you get logged in.
Google could easily do that automatically with Gmail and Chrome. The only downside I can see is that email is still a bit slower than password authentication.
Regarding b) it's extremely simple. Passkeys are private keys (like SSH), stored in a password manager, accessed via JavaScript.
It's pretty easy to avoid vendor lock-in. Here's what I do when I decide to add passkeys for a site I use.
1. I press the "create a passkey" button on the site's security page (finding this is usually the most time consuming part).
2. My browser gives a dialog offering to save the passkey in 1Password. I let it do so.
3. I press the "create a passkey" button again.
4. I get the same save dialog. This time I pick the option on the dialog to save elsewhere.
5. That dialog goes away and I get a new dialog for saving the passkey in Apple's iCloud. I let it do so.
That all is just "click", "click", "click", "click", <touch fingerprint reader>.
The result is that I now have two passkeys for the site, handled by two different vendors.
> I can easily move a password around; it's just a string. As far as I understand it, major passkey implementations are basically non-portable
There's a spec being worked on for passkey export/import [1].
[1] https://blog.1password.com/fido-alliance-import-export-passk...
I'm fed up. I'm not using passkeys because I trust no one to not take advantage them eventually. Not even my beloved bitwarden.
"You will own nothing and you will be happy."
CTAP2 works nicely over Bluetooth and NFC so you can usually use these credentials even on machines which don’t integrate with your keychain of course. I actually find them extremely convenient and they’re obviously more secure than passwords across a broad range of common attacks.
As with passwords, they will be misused by vendors and clueless users alike, and it’s up to us to (a) use them correctly for ourselves (maintaining redundancy) and (b) encourage our less tech-fluent friends and family to do the same.
All around though, I think they’re a considerable win for convenience and security.
How the hell do you think that’s better? Passkeys are absolutely portable, many of the password managers on the market allow you to export them.
What happens if google suddenly decides to deactivate your account?
Another company I wanted to give lots of money too was fal.ai, but you can only login through github, which I didn't want to do. I even emailed them asking about alternatives but they couldn't even bother to reply. So my money was spent else where.
I don't have my email login on my computer so for every tragic link I get that means I would either have to find a way to get the link from my phone to the computer or login to my email from the computer just to click that stupid link.
You know what faster, more efficient and better in every way? Using an user and password.
I should not have to suffer because some nitwits can't remember their passwords, we should not subsidize mediocrity because we will get more mediocrity.
Thank you for reading my rant.
Now that Passkeys are a thing they are much more viable as a primary authentication method since you can lose your phone or switch PCs and still have access to them. But as long as you're allowing pass(word|key) reset using email anyway, it certainly doesn't hurt to have magic links as an option.
First off, nearly two full years into this “standard” existing only around 1/5 to 1/4 of my accounts support it. And the support is a crap shoot. I am finding some accounts only allowing you to have a single passkey and others such as Amazon expect a certain format making Keepass unusable. I save the key but I guess the response is wrong as Amazon thinks it failed.
ssh keys are great. Amazing. Having those instead of passwords would be a huge upgrade. Most people need a simple key management ui and portable keys then they would be set. But it’s like Password managers and sites that don’t allow copy and paste all over again.
I am sure a more mainstream solution such as Google/Apple/Microsoft/1Password’s password manager would be a better experience. But the portability and data sovereignty of using a self hosted open source password manager such as Keepass is a requirement I have and like I mentioned, the supermajority of my online accounts have zero passkey support even 2 years in.
That's the biggest mistake that passkey advocates make: assuming that if you've used passkeys, you know what passkeys are. Or that you can watch a short video explanation describing the benefits of passkeys, and then you "know what a passkey is."
Here's what a passkey is:
Passkeys are randomly generated passwords that are required to be managed by a password manager. All the major password managers support them, including Apple, Google, Microsoft, Mozilla, and 1Password.
Passkeys can be public/private keypairs, or they can just be secret passwords. Webauthn is designed by committee, so there's always more than one way to do it.
By requiring the passkey to be managed by a password manager, you get some anti-phishing protection. A passkey includes metadata, including the website domain that created it, and the password managers simply won't provide the passkey to the wrong domain. They provide no way for you to copy and paste the passkey into a website, as you can with a password; there's no social-engineering technique someone can use to get you to copy and paste your passkey to an enemy.
A passkey manager is morally required to do an extra factor of authentication (e.g. fingerprint, Face ID, hardware keys, etc.) when you login to a website, but the website has no way of knowing/proving whether that happened; they just get the password.
You reset your passkey the same way you reset your password, because passkeys are just passwords that have to be managed with a password manager. Some sites make it easy to reset your password, some make it hard. You know the drill; there's nothing new or different there.
If your site/app is comfortable with magic links, or a simple "forgot my password" email, then it would also make sense to let users add a passkey by clicking a link in an email.
If your site/app doesn't have a "forgot my password" flow, you don't need one for passkeys, either. (But, surely you have something in place…? Even Yubikeys/SSH/PGP private keys can be lost.)
If you're happy with your password manager, there's no real need to switch, but even very "sophisticated" password users have been known to fall prey to social-engineered phishing attacks.
Are you sure you're never going to copy-and-paste your password into the wrong hands? I don't trust myself that much.
Passkeys make it harder to switch password managers because the password managers are designed not to let you copy-and-paste a passkey, including from Google's Password Manager to Apple's Password Manager. I think all the password managers kinda like that lock in, and there's something good and bad about it.
Instead, password managers recommend that sites/apps allow each user to have multiple passkeys. Sites/apps may or may not actually allow that, but that's the only way to be sure a given user can login with both Google's password manager and Apple's password manager: give each password manager its own passkey for each site.
I think Ricky is completely right in this case that if you're a site like 404 Media using magic links today, passkeys are just better. As a user, if your passkey doesn't work or gets lost, you can just click "forgot my passkey" and get another magic link, and set up a new passkey.
For example, I was helping my mom pay a bill online the other day, and it turned into a circus of scribbled passwords in a notebook, adding minor tweaks to a common master password, having to rely on "forgot my password" emails just to also need to confirm via sms codes, too bad if you can’t access your phone. It was wild. Introducing passkeys into her workflow would totally remove these frictions.
Of course the way password managers are being treated like a new walled garden is not the best but this cannot be used to discredit what really looks like a valid solution to the problem of having to remember too many credentials.
I only use them on sites or services I do not take seriously or would never rely on for anything.
Not wanting a password doesn't absolve the software of securing user data, or users being informed of them effecting relaxing the need for security around their data.
For so many reasons that become apparent until years later, creating accounts with email+password is the best, on your own domain that can be moved between hosts, especially since there is little recourse with any identity providers.
But almost all B2B services are high value
So why try and provide one size fits all. Because B2C behemoths want to climb the pole
Look, provide everyone with a HSM, and every web requests made gets signed with said HSM. And if you lose HSM walk into the office and get a new one.
If your service is not worth that effort, really I think we can work with passwords and OTP.
There is no way that older people will ever understand passkeys. Corporations should immediately stop this foolish push to passkeys where often absolutely no explanation is made to the user of what they are or why anyone should care. My parents are sticking with unique 20-character passwords per site.
Don't even get me started on trying to explain mobile app 2FA to them...
passkey solve the company problem, not the user's.
it's like FB using your phone number as your immutable id.
* Prompt for username & password in such a way that the browser's username&password-saving doesn't recognize. (I suspect the site is usually leaning on separate form field autocomplete to get an email address or other username.)
* Enter username in one DOM, submit, wait, and then they load a new page or change the DOM, to prompt for password.
* Burying/obscuring the username&password option, in favor of an array of buttons to log in from various big tech companies own authentication (or misused authorization), log in via email or SMS link, etc.
* Mandatory email/SMS 2FA, even for innocuous sites.
* Slow 2FA. Sit around waiting for it, pressing the mail-check button repeatedly, like I'm a type-A person (trying to close the elevator door before someone across the lobby gets close enough we have to wait).
* Then the 2FA email often has a bunch of worthless filler around it, so that I can't just glance at it in the small tiled window in the corner of my screen, but have to switch to the email program in a large tile, memorize or copy&paste it, and then switch back to the browser window. Which then often upsets the form field validation, or even loses the keyboard input focus it had before, just for that extra little negative UX touch.
* I kid you not, one company's gratuitous mandatory 2FA emails the other day consistently had some invisible unicode character next to the number, which invisible character was picked up in the double-click copy&paste, sent through the form submission, and then they rejected the string as invalid 2FA.
* The credit card company that insists on SMS 2FA (when I'm on desktop), and then sends an 8-digit code to my rather than a 6-digit like most other companies. Just in SMS, which is at a font size for text chats, not for perfectly transcribing numbers that are 8 digits without even separators like everyone else has used for most purposes forever.
* All the companies that have recently started emailing me every time I "sign in on a new computer", from the same IP address and browser fingerprint as usual. This is starting to become the norm, and it's not only annoying, but it also presumably desensitizes a lot of people to legitimate emails about security. (If anyone ever logs into one of my accounts, I'd probably never know, amidst the the piles of irresponsible false alarm alerts about this.) (This is another bad practice by people seemingly trying to 'do security' like the one where banks would email you from address domains other than their own, at the same time that they're emailing you to watch out for phishing, like it's your moral failing.)
* Some organizations are doing password expiration, on newly-developed sites.
* Somewhat hiding the login button/link for existing accounts, but there's a big bright button for creating a new account. (Actually, this is a long-time practice by a number of sites, not recent, but some sites still doing it.)
In most cases, I don't think it's dark patterns, to discourage people from logging out or clearing cookies, nor to make the more receptive to coming passkeys or to whatever side incentives (besides some users' preferences) the company might have for doing log-in-with-other-company.
I think it's probably a bunch of developers just integrating off-the-shelf frameworks, sometimes spending a lot of effort to try to understand the off-the-shelf thing's particular proprietary bureaucracy, with little time left for the UX, security, or anything else. And maybe mix in some enthusiastic sprint tasks to add in other ways of logging in, incidentally making the original way worse, since the original way is not within scope of the task. And, in some cases, it might be a bad compliance checklist, or bad interpretation of one.
For example in my current job there's a push to follow the trend of splitting username and password entry onto two separate pages. Ostensibly this is to make it easier to deal with SSO because then you can look up on the back end the user's configured authentication type and direct them to oauth flow or passkey challenge or whatever instead of password entry box. But the bonus side effect is that it also provides an additional layer of tracking so that you can monitor mouse movements, keydown behavior etc and use that to feed into a model that can detect scripted attacks then push a captcha in between or block the login flow altogether and send a security alert to the owner of the account etc. This is all in pursuit of protecting the user's account, but at the same time it makes everything more inconvenient and privacy-invading for real life legitimate users who just want to log in.
I suppose you could blame malicious actors for forcing the enshittification, but in many ways I feel like it's a failure of the service providers because they're building technical solutions that make it easier for them to detect abuse rather than thinking about what the users themselves might prefer. It's like all the bureaucracy that still exists nowadays around flying thanks to terror attacks that happened decades ago. The terrorists may be long dead, but their impact is still felt in how they have changed everyone's way of life! I'm not sure that's a win for the good guys.