Login de usuários: podemos fazer algo melhor que usar senhas ou serviços centralizados?

334
-1

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
334
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Login de usuários: podemos fazer algo melhor que usar senhas ou serviços centralizados?

  1. 1. François Marier – @fmarier login de usuários: podemos fazer algo melhor que usar senhas ou serviços centralizados?
  2. 2. senhas
  3. 3. problema #1: senhas são difíceis de proteger
  4. 4. bcrypt / scrypt / pbkdf2 per-user salt site secret password & lockout policies secure recovery
  5. 5. bcrypt / scrypt / pbkdf2 salt por usuário site secret password & lockout policies secure recovery
  6. 6. bcrypt / scrypt / pbkdf2 salt por usuário segredo de site password & lockout policies secure recovery
  7. 7. bcrypt / scrypt / pbkdf2 salt por usuário segredo de site políticas de senha e bloqueio secure recovery
  8. 8. bcrypt / scrypt / pbkdf2 salt por usuário segredo de site políticas de senha e bloqueio recuperação segura
  9. 9. 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
  10. 10. senhas são difíceis de protoger elas são um encargo
  11. 11. ALTER TABLE user DROP COLUMN password;
  12. 12. problema #2: senhas são difíceis de lembrar
  13. 13. agenda de contas e senhas de internet
  14. 14. escolha uma senha fácil
  15. 15. escolha uma senha fácil e use ela em todos os lugares
  16. 16. senhas são difíceis de lembrar elas precisam ser redefinidas
  17. 17. controla conta e-mail controla todas as contas =
  18. 18. “People want a little dating before marriage.” Eric Vishria – Rockmelt
  19. 19. descentralizado
  20. 20. myid.com/u/francois
  21. 21. privacidade®
  22. 22. sistemas de login existentes não são bons o suficiente
  23. 23. sistema ideal de autenticação para a web
  24. 24. sistema ideal de autenticação para a web ● descentralizado simples para todos os navegadores
  25. 25. sistema ideal de autenticação para a web ● descentralizado ● simples para todos os navegadores
  26. 26. ● descentralizado ● simples ● para todos os navegadores sistema ideal de autenticação para a web
  27. 27. ● descentralizado ● simples ● para todos os navegadores
  28. 28. como isso funciona?
  29. 29. fmarier@gmail.com
  30. 30. obtendo a prova de propriedade de um e-mail
  31. 31. autenticar?
  32. 32. autenticar? chave pública
  33. 33. autenticar? chave pública assinada chave pública
  34. 34. você tem uma atestado assinado pelo seu provedor de e-mail que você é o dono daquele endereço
  35. 35. logando em um site de terceiros
  36. 36. Válido por: 2 minutos wikipedia.org assertion
  37. 37. Válido por: 2 minutos wikipedia.org verificar audience assertion
  38. 38. Válido por: 2 minutos wikipedia.org verificar audience verificar validade assertion
  39. 39. Válido por: 2 minutos wikipedia.org verificar audience verificar validade verificar assinatura assertion
  40. 40. assertion Válido por: 2 minutos wikipedia.org chave pública
  41. 41. assertion Válido por: 2 minutos wikipedia.org
  42. 42. assertion cookie de sessão
  43. 43. demo #1: http://sloblog.io fmariertest@eyedee.me
  44. 44. Persona já é um sistema descentralizado
  45. 45. descentralização é a resposta, mas não é a estratégia de adoção do produto
  46. 46. não podemos esperar até todos os domínios adotarem o Persona
  47. 47. solução: uma fallback temporária centralizada não podemos esperar até todos os domínios adotarem o Persona
  48. 48. demo #2: http://www.lpeu.com.br fmariertest@gmail.com
  49. 49. Persona já funciona com todos os domínios de e-mail
  50. 50. identity bridging
  51. 51. demo #3: http://www.reasonwell.com/ fmariertest@yahoo.com
  52. 52. Persona supporta todos os navegadores modernos >= 8
  53. 53. Persona é descentralizado, simples e para todos os navegadores
  54. 54. é simples para os usuários, mas também é simples para os desenvolvedores?
  55. 55. <script src=”https://login.persona.org/include.js”> </script> </body></html>
  56. 56. navigator.id.watch({ loggedInEmail: “francois@mozilla.com”, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
  57. 57. navigator.id.watch({ loggedInUser: “francois@mozilla.com”, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
  58. 58. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
  59. 59. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
  60. 60. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; } });
  61. 61. navigator.id.request()
  62. 62. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; } });
  63. 63. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; } });
  64. 64. def verify_assertion(assertion): page = requests.post( 'https://verifier.login.persona.org/verify', data={ "assertion": assertion, "audience": 'http://www.lpeu.com.br'} ) data = page.json return data.status == 'okay'
  65. 65. def verify_assertion(assertion): page = requests.post( 'https://verifier.login.persona.org/verify', data={ "assertion": assertion, "audience": 'http://www.lpeu.com.br'} ) data = page.json return data.status == 'okay'
  66. 66. def verify_assertion(assertion): page = requests.post( 'https://verifier.login.persona.org/verify', data={ "assertion": assertion, "audience": 'http://www.lpeu.com.br'} ) data = page.json return data.status == 'okay'
  67. 67. { status: “okay”, audience: “http://www.lpeu.com.br”, expires: 1344849682560, email: “francois@mozilla.com”, issuer: “login.persona.org” }
  68. 68. { status: “failed”, reason: “assertion has expired” }
  69. 69. navigator.id.logout()
  70. 70. navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; } });
  71. 71. 1. carregue uma biblioteca javascript 2. configure callbacks para login & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
  72. 72. 1. carregue uma biblioteca javascript 2. configure callbacks para login & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
  73. 73. 1. carregue uma biblioteca javascript 2. configure callbacks para login & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
  74. 74. 1. carregue uma biblioteca javascript 2. configure callbacks para login & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
  75. 75. você pode adicionar suporte ao Persona em quatro passos simples
  76. 76. apenas um pedido
  77. 77. ao construir um site novo: comece com Persona
  78. 78. em um site/app existente: adicione suporta ao Persona
  79. 79. Para saber mais sobre o Persona: https://login.persona.org/ https://developer.mozilla.org/docs/Persona/Why_Persona https://developer.mozilla.org/docs/Persona/Quick_Setup https://github.com/mozilla/browserid-cookbook https://developer.mozilla.org/docs/Persona/Libraries_and_plugins https://wiki.mozilla.org/Identity#Get_Involved @fmarier http://fmarier.org
  80. 80. 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" }
  81. 81. https://eyedee.me/.well-known/browserid: { "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html" } identity provider API
  82. 82. https://eyedee.me/.well-known/browserid: { "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html" } identity provider API
  83. 83. https://eyedee.me/.well-known/browserid: { "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html" } identity provider API
  84. 84. https://eyedee.me/.well-known/browserid: { "public-key": { "algorithm":"RS", "n":"8606...", "e":"65537" }, "authentication": "/browserid/sign_in.html", "provisioning": "/browserid/provision.html" } identity provider API
  85. 85. 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
  86. 86. 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
  87. 87. 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
  88. 88. 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
  89. 89. © 2013 François Marier <francois@mozilla.com> 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:

×