Password authentication may be replaced with client TLS authentication. Comparison of client TLS authentication and password authentication:
- Client TLS authentication is less susceptible to social engineering.
- Client TLS authentication is not susceptible to brute force.
- Password authentication is less secure if you implement it from scratch for your website. This is a special case of the rule “Don't roll your own security”.
- Login procedure is simpler with client TLS authentication.
- The backup procedure for client TLS authentication is essentially the same as for password authentication, but differs in technical details. Here I assume that a typical user logs in to many websites. A user can't remember passwords for all those websites, so they store them in a password manager. With password authentication, the user backs up the password manager database. With client TLS authentication, they back up the TLS key database. With password authentication, a backup is needed every time a user creates a website account (hence a new password is added), but with client TLS authentication, the user can use the same client TLS key pair with all websites.
- Client TLS authentication is unfamiliar both to programmers and users, so you will be a pioneer, educating them and fixing bugs and GUI defects in web libraries and web browsers.
There was a concern in the comments that client TLS authentication ties a user account to a device, in other words, at most one user can authenticate from one computer. In fact, almost all OSes allows creating several OS user accounts, and every OS user account has its own TLS key database, so it can log in as a separate website user. Of course, it's possible that two users share an OS user account, but it's inconvenient and insecure and shouldn't be done regardless of whether it's used to log in to websites or not.
I heard that client TLS authentication is used on financial websites and admin panels. Personally, I didn't encounter it on websites except for WebMoney. Note that TLS can be used and is used under the hood in clients which aren't web browsers, that is, in specialized programs like messengers, bank clients, etc. I believe that client TLS authentication is used there quite often.
I think that the situation with client TLS authentication on websites is sad. Client TLS authentication is so rare that programmers don't know about it and reinvent the wheel.
I guess that the reason for this situation is that password authentication was more convenient in the past. Users could just store passwords in their heads because they had few website accounts. It's not possible with client TLS keys. That users shared OS user accounts may have played a role (see above why). Then the number of website accounts per user increased. Users started reusing passwords. The value of website accounts increased. Account hacking intensified. Password managers were invented. You know the rest of the story.