Upgrade to Pro — share decks privately, control downloads, hide ads and more …

User logins: can we do better than passwords and avoid centralized services?

User logins: can we do better than passwords and avoid centralized services?

Websites that need to identify their users commonly use one of two methods: a username & password scheme that's hard to secure and creates a lot of pain for users, or a centralized proprietary service on which many of their users already have accounts. There must a better way. A cross-browser solution for authenticating users which feels like the Web and preserves the decentralized architecture necessary for an open network. We present Mozilla Persona.

Video recording: http://hemingway.softwarelivre.org/fisl14/high/41a/sala41a-high-201307051001.ogg

Francois Marier

July 05, 2013
Tweet

More Decks by Francois Marier

Other Decks in Programming

Transcript

  1. François Marier – @fmarier login de usuários: podemos fazer algo

    melhor que usar senhas ou serviços centralizados?
  2. bcrypt / scrypt / pbkdf2 salt por usuário site secret

    password & lockout policies secure recovery
  3. bcrypt / scrypt / pbkdf2 salt por usuário segredo de

    site password & lockout policies secure recovery
  4. bcrypt / scrypt / pbkdf2 salt por usuário segredo de

    site políticas de senha e bloqueio secure recovery
  5. bcrypt / scrypt / pbkdf2 salt por usuário segredo de

    site políticas de senha e bloqueio recuperação segura
  6. bcrypt / scrypt / pbkdf2 salt por usuário segredo de

    site políticas de senha e bloqueio recuperação segura recomendações recomendações de senha para de senha para 2013 2013
  7. você tem uma atestado assinado pelo seu provedor de e-mail

    que você é o dono daquele endereço
  8. navigator.id.watch({ loggedInEmail: “[email protected]”, onlogin: function (assertion) { $.post('/login', {assertion: assertion},

    function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
  9. navigator.id.watch({ loggedInUser: “[email protected]”, onlogin: function (assertion) { $.post('/login', {assertion: assertion},

    function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
  10. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},

    function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
  11. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},

    function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
  12. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},

    function (data) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; } });
  13. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},

    function (data) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; } });
  14. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},

    function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; } });
  15. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},

    function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; } });
  16. 1. carregue uma biblioteca javascript 2. configure callbacks para login

    & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
  17. 1. carregue uma biblioteca javascript 2. configure callbacks para login

    & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
  18. 1. carregue uma biblioteca javascript 2. configure callbacks para login

    & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
  19. 1. carregue uma biblioteca javascript 2. configure callbacks para login

    & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
  20. identity provider API https://eyedee.me/.well-known/browserid: { "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537"

    }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html" }
  21. identity provider API 1. check for your /.well-known/browserid 2. try

    the provisioning endpoint 3. show the authentication page 4. call the provisioning endpoint again
  22. identity provider API 1. check for your /.well-known/browserid 2. try

    the provisioning endpoint 3. show the authentication page 4. call the provisioning endpoint again
  23. identity provider API 1. check for your /.well-known/browserid 2. try

    the provisioning endpoint 3. show the authentication page 4. call the provisioning endpoint again
  24. identity provider API 1. check for your /.well-known/browserid 2. try

    the provisioning endpoint 3. show the authentication page 4. call the provisioning endpoint again
  25. © 2013 François Marier <[email protected]> Este obra foi licenciado sob

    uma Licença Creative Commons Atribuição-CompartilhaIgual 3.0 Nova Zelândia. Porteiro: https://secure.flickr.com/photos/wildlife_encounters/8024166802/ Top 500 senhas: http://xato.net/passwords/more-top-worst-passwords/ Pergaminho: https://secure.flickr.com/photos/27613359@N03/6750396225/ Taça de vinho: https://secure.flickr.com/photos/yourdon/3977084094/ Sinal de pare: https://secure.flickr.com/photos/artbystevejohnson/6673406227/ Créditos das fotografias: