https://www.rfk.id.au/blog/entry/persona-identity-provider/
There are some things to be mindful of w.r.t. security in this approach, but it seems to work very nicely for me.The those that haven't read this link: his implementation is done 100% with static files. Clever and looks secure enough to me (though I'm no crypto guy).
Didn't take all that long, I guess. See commit log :)
Pretty cool it's this straightforward, though.
Hence the idea of just pre-generating the key pair and sharing the key with my browsers via Firefox Sync.
The provisioning and signin pages could point to static pages that just say "If you're seeing this, you're trying to authenticate as me and you aren't me; go away."
Browser extensions use their own secure storage mechanisms, not the localStorage used by sites, but yeah.
> Where I'm still fuzzy is if the site performs local verification, or login.persona.org does it, it might contact your server to grab its pubkey over SSL, requiring you to host something on your email domain.
Ignoring the workflow for domains without native identity providers (for which persona.org does its own mail-you-a-link validation), only one thing happens on the server accepting Persona: it requests the public key from the email domain. The site then expects to receive a message from the browser that chains back to that public key. So, you'd have to post some static files to /.well-known/ on your email domain, but the browser extension would construct the signed messages because it has the private key.
You could do this in two ways. For domains completely owned by the user, you could let the browsers hold the domain private key, and mint arbitrary identities on that domain on demand. For domains with multiple users but still wanting to statically manage identities, you could statically generate public/private keys for users and sign them with the domain key, then let the browsers hold onto the email keypairs only.
He's using mobile authenticator as a password mechanism, but it should be modifiable to just trust the local browser.