• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Login de usuários: podemos fazer algo melhor que usar senhas ou serviços centralizados?
 

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

on

  • 318 views

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 ...

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

Statistics

Views

Total Views
318
Views on SlideShare
318
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • François Marier – @fmarier login de usuários: podemos fazer algo melhor que usar senhas ou serviços centralizados?
    • senhas
    • problema #1: senhas são difíceis de proteger
    • bcrypt / scrypt / pbkdf2 per-user salt site secret password & lockout policies secure recovery
    • bcrypt / scrypt / pbkdf2 salt por usuário site secret password & lockout policies secure recovery
    • bcrypt / scrypt / pbkdf2 salt por usuário segredo de site password & lockout policies secure recovery
    • bcrypt / scrypt / pbkdf2 salt por usuário segredo de site políticas de senha e bloqueio secure recovery
    • bcrypt / scrypt / pbkdf2 salt por usuário segredo de site políticas de senha e bloqueio recuperação segura
    • 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
    • senhas são difíceis de protoger elas são um encargo
    • ALTER TABLE user DROP COLUMN password;
    • problema #2: senhas são difíceis de lembrar
    • agenda de contas e senhas de internet
    • escolha uma senha fácil
    • escolha uma senha fácil e use ela em todos os lugares
    • senhas são difíceis de lembrar elas precisam ser redefinidas
    • controla conta e-mail controla todas as contas =
    • “People want a little dating before marriage.” Eric Vishria – Rockmelt
    • descentralizado
    • myid.com/u/francois
    • privacidade®
    • sistemas de login existentes não são bons o suficiente
    • sistema ideal de autenticação para a web
    • sistema ideal de autenticação para a web ● descentralizado simples para todos os navegadores
    • sistema ideal de autenticação para a web ● descentralizado ● simples para todos os navegadores
    • ● descentralizado ● simples ● para todos os navegadores sistema ideal de autenticação para a web
    • ● descentralizado ● simples ● para todos os navegadores
    • como isso funciona?
    • fmarier@gmail.com
    • obtendo a prova de propriedade de um e-mail
    • autenticar?
    • autenticar? chave pública
    • autenticar? chave pública assinada chave pública
    • você tem uma atestado assinado pelo seu provedor de e-mail que você é o dono daquele endereço
    • logando em um site de terceiros
    • Válido por: 2 minutos wikipedia.org assertion
    • Válido por: 2 minutos wikipedia.org verificar audience assertion
    • Válido por: 2 minutos wikipedia.org verificar audience verificar validade assertion
    • Válido por: 2 minutos wikipedia.org verificar audience verificar validade verificar assinatura assertion
    • assertion Válido por: 2 minutos wikipedia.org chave pública
    • assertion Válido por: 2 minutos wikipedia.org
    • assertion cookie de sessão
    • demo #1: http://sloblog.io fmariertest@eyedee.me
    • Persona já é um sistema descentralizado
    • descentralização é a resposta, mas não é a estratégia de adoção do produto
    • não podemos esperar até todos os domínios adotarem o Persona
    • solução: uma fallback temporária centralizada não podemos esperar até todos os domínios adotarem o Persona
    • demo #2: http://www.lpeu.com.br fmariertest@gmail.com
    • Persona já funciona com todos os domínios de e-mail
    • identity bridging
    • demo #3: http://www.reasonwell.com/ fmariertest@yahoo.com
    • Persona supporta todos os navegadores modernos >= 8
    • Persona é descentralizado, simples e para todos os navegadores
    • é simples para os usuários, mas também é simples para os desenvolvedores?
    • <script src=”https://login.persona.org/include.js”> </script> </body></html>
    • navigator.id.watch({ loggedInEmail: “francois@mozilla.com”, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
    • navigator.id.watch({ loggedInUser: “francois@mozilla.com”, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
    • navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
    • navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { // do something } ); }, onlogout: function () { window.location = '/logout'; } });
    • navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; } });
    • navigator.id.request()
    • navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/'; } ); }, onlogout: function () { window.location = '/logout'; } });
    • navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; } });
    • 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'
    • 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'
    • 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'
    • { status: “okay”, audience: “http://www.lpeu.com.br”, expires: 1344849682560, email: “francois@mozilla.com”, issuer: “login.persona.org” }
    • { status: “failed”, reason: “assertion has expired” }
    • navigator.id.logout()
    • navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion}, function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; } });
    • 1. carregue uma biblioteca javascript 2. configure callbacks para login & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
    • 1. carregue uma biblioteca javascript 2. configure callbacks para login & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
    • 1. carregue uma biblioteca javascript 2. configure callbacks para login & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
    • 1. carregue uma biblioteca javascript 2. configure callbacks para login & logout 3. adicione botões de login & logout 4. verifique a prova de propriedade
    • você pode adicionar suporte ao Persona em quatro passos simples
    • apenas um pedido
    • ao construir um site novo: comece com Persona
    • em um site/app existente: adicione suporta ao Persona
    • 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
    • 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" }
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • © 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: