Persona is nice, because it is simple. It is still important to note
that it is an alternative mostly to: "Trust that a user being able to
read an email address is proof authenticating said user" -- in other
words sites using it have no expectation that the user need any form of
authentication before being issued a persona (Similar to eg: shared mail
accounts -- where having access to the email does not identify you as a
single person/user -- rather as a group of users -- which is subtly
different).
Additionally without any form of single sign out/invalidation of private
keys/session certificates other than expiration (please correct me if
I've missed something wrt sign-out/invalidation) -- persona is in some
ways less secure than "trust the mailbox": Even if you change your
password/secret key -- any (stolen) signed session certificate (aka
token/ticket in most other systems) will remain valid as far as the
authorizing site is concerned.
This is similar to a stolen cookie -- except the site cannot decide
how long the certificate is valid -- the identity provider does. So if
somedomain.net signs certificates valid for a year, the only thing you
can do as a site allowing persona logins, is mark said domain as "not
trustworthy enough" -- and disallow logins.
This is "fine" as long as Persona isn't used for anything "serious" --
however with social engineering attacks, anything that to the end users
appears to be proof of identity can be used to escalate privileges ("He
sent me a hipsterchat-message on kewlchat.net -- so I reset the
RDP-password like he requested").
I do think moving identity management "closer" to the user is good --
let the ISP, the various organizations the user is identified with vet
and administer the user database -- but for the general use case -- we
also need some form of trust between the sites, and the iDPs.
Shibboleth[1] is one approach to this -- but it is more complicated that
Persona, and has more overhead.
Personally I'd like to see a solution based around x509 certs and
organizations like https://cacert.org -- but for that to work we need
browsers to get better at handling cerificates. That is -- we need a
user friendly way to manage identities based around x509 -- and we need
browsers and servers to expect to validate both server and client
certificates. Unfortunately such validation will entail a lot of
problems with expired certs etc... it's not a trivial problem to solve
in practice.
[1] http://shibboleth.net/