SlideShare ist ein Scribd-Unternehmen logo
1 von 118
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:

Weitere ähnliche Inhalte

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

WordPress, muito além de um software para blogs
WordPress, muito além de um software para blogsWordPress, muito além de um software para blogs
WordPress, muito além de um software para blogsCayo Medeiros
 
Seis passos para colocar um projeto local em um servidor próprio
Seis passos para colocar um projeto local em um servidor próprioSeis passos para colocar um projeto local em um servidor próprio
Seis passos para colocar um projeto local em um servidor próprioMarcos Antônio de Souza Silva
 
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurançaInternet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurançaW. Gabriel de Oliveira
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos WebSergio Henrique
 
Arteccom Workshop Magento
Arteccom Workshop MagentoArteccom Workshop Magento
Arteccom Workshop MagentoThiago Verly
 
Como Limpar Seu Site WordPress
Como Limpar Seu Site WordPressComo Limpar Seu Site WordPress
Como Limpar Seu Site WordPressSucuri
 
Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Michael Douglas
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Loiane Groner
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutosLoiane Groner
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 
Meetup tecnologia - desenvolvimento, infra e processos
Meetup  tecnologia - desenvolvimento, infra e processosMeetup  tecnologia - desenvolvimento, infra e processos
Meetup tecnologia - desenvolvimento, infra e processosGuilherme Veras
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 
Walker Leite apresenta usando o WordPress como backend de aplicação
Walker Leite apresenta usando o WordPress como backend de aplicaçãoWalker Leite apresenta usando o WordPress como backend de aplicação
Walker Leite apresenta usando o WordPress como backend de aplicaçãoWordCamp Floripa
 
OpenAM - Fast SSO
OpenAM - Fast SSOOpenAM - Fast SSO
OpenAM - Fast SSOYros
 
Guia de Segurança para WordPress
Guia de Segurança para WordPressGuia de Segurança para WordPress
Guia de Segurança para WordPressSucuri
 

Ähnlich wie Login de usuários: podemos fazer algo melhor que usar senhas ou serviços centralizados? (20)

WordPress, muito além de um software para blogs
WordPress, muito além de um software para blogsWordPress, muito além de um software para blogs
WordPress, muito além de um software para blogs
 
Seis passos para colocar um projeto local em um servidor próprio
Seis passos para colocar um projeto local em um servidor próprioSeis passos para colocar um projeto local em um servidor próprio
Seis passos para colocar um projeto local em um servidor próprio
 
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurançaInternet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
Internet e Segurança - Direito e Tecnologia da Informação - Dicas de segurança
 
Segurança em Aplicativos Web
Segurança em Aplicativos WebSegurança em Aplicativos Web
Segurança em Aplicativos Web
 
Arteccom Workshop Magento
Arteccom Workshop MagentoArteccom Workshop Magento
Arteccom Workshop Magento
 
Como Limpar Seu Site WordPress
Como Limpar Seu Site WordPressComo Limpar Seu Site WordPress
Como Limpar Seu Site WordPress
 
Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php Por que jenkins se posso usar deployer php
Por que jenkins se posso usar deployer php
 
Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2 Devfest Cerrado: Angular 2
Devfest Cerrado: Angular 2
 
Tutorial codeigniter
Tutorial codeigniterTutorial codeigniter
Tutorial codeigniter
 
Angular 2 em 60 minutos
Angular 2 em 60 minutosAngular 2 em 60 minutos
Angular 2 em 60 minutos
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 
Casa hacker openwrt
Casa hacker openwrtCasa hacker openwrt
Casa hacker openwrt
 
Linux
LinuxLinux
Linux
 
Meetup tecnologia - desenvolvimento, infra e processos
Meetup  tecnologia - desenvolvimento, infra e processosMeetup  tecnologia - desenvolvimento, infra e processos
Meetup tecnologia - desenvolvimento, infra e processos
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Aula 8 active diretory - 29092012
Aula 8   active diretory - 29092012Aula 8   active diretory - 29092012
Aula 8 active diretory - 29092012
 
Walker Leite apresenta usando o WordPress como backend de aplicação
Walker Leite apresenta usando o WordPress como backend de aplicaçãoWalker Leite apresenta usando o WordPress como backend de aplicação
Walker Leite apresenta usando o WordPress como backend de aplicação
 
OpenAM - Fast SSO
OpenAM - Fast SSOOpenAM - Fast SSO
OpenAM - Fast SSO
 
Guia de Segurança para WordPress
Guia de Segurança para WordPressGuia de Segurança para WordPress
Guia de Segurança para WordPress
 
Workshop Magento
Workshop MagentoWorkshop Magento
Workshop Magento
 

Mehr von Francois Marier

Security and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power UsersSecurity and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power UsersFrancois Marier
 
Getting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your WebappGetting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your WebappFrancois Marier
 
Hardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyHardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyFrancois Marier
 
Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016Francois Marier
 
Privacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxPrivacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxFrancois Marier
 
Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015Francois Marier
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptFrancois Marier
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptFrancois Marier
 
Supporting Debian machines for friends and family
Supporting Debian machines for friends and familySupporting Debian machines for friends and family
Supporting Debian machines for friends and familyFrancois Marier
 
Outsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianOutsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianFrancois Marier
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applicationsFrancois Marier
 
Easy logins for JavaScript web applications
Easy logins for JavaScript web applicationsEasy logins for JavaScript web applications
Easy logins for JavaScript web applicationsFrancois Marier
 
You're still using passwords on your site?
You're still using passwords on your site?You're still using passwords on your site?
You're still using passwords on your site?Francois Marier
 
Killing Passwords with JavaScript
Killing Passwords with JavaScriptKilling Passwords with JavaScript
Killing Passwords with JavaScriptFrancois Marier
 
Securing the Web without site-specific passwords
Securing the Web without site-specific passwordsSecuring the Web without site-specific passwords
Securing the Web without site-specific passwordsFrancois Marier
 
Easy logins for PHP web applications
Easy logins for PHP web applicationsEasy logins for PHP web applications
Easy logins for PHP web applicationsFrancois Marier
 
Persona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebPersona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebFrancois Marier
 
Taking the pain out of signing users in
Taking the pain out of signing users inTaking the pain out of signing users in
Taking the pain out of signing users inFrancois Marier
 

Mehr von Francois Marier (20)

Security and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power UsersSecurity and Privacy settings for Firefox Power Users
Security and Privacy settings for Firefox Power Users
 
Getting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your WebappGetting Browsers to Improve the Security of Your Webapp
Getting Browsers to Improve the Security of Your Webapp
 
Hardening Firefox for Security and Privacy
Hardening Firefox for Security and PrivacyHardening Firefox for Security and Privacy
Hardening Firefox for Security and Privacy
 
Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016Security and Privacy on the Web in 2016
Security and Privacy on the Web in 2016
 
Privacy and Tracking Protection in Firefox
Privacy and Tracking Protection in FirefoxPrivacy and Tracking Protection in Firefox
Privacy and Tracking Protection in Firefox
 
Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015Security and Privacy on the Web in 2015
Security and Privacy on the Web in 2015
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScript
 
URL to HTML
URL to HTMLURL to HTML
URL to HTML
 
Integrity protection for third-party JavaScript
Integrity protection for third-party JavaScriptIntegrity protection for third-party JavaScript
Integrity protection for third-party JavaScript
 
Supporting Debian machines for friends and family
Supporting Debian machines for friends and familySupporting Debian machines for friends and family
Supporting Debian machines for friends and family
 
Outsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to DebianOutsourcing your webapp maintenance to Debian
Outsourcing your webapp maintenance to Debian
 
URL to HTML
URL to HTMLURL to HTML
URL to HTML
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applications
 
Easy logins for JavaScript web applications
Easy logins for JavaScript web applicationsEasy logins for JavaScript web applications
Easy logins for JavaScript web applications
 
You're still using passwords on your site?
You're still using passwords on your site?You're still using passwords on your site?
You're still using passwords on your site?
 
Killing Passwords with JavaScript
Killing Passwords with JavaScriptKilling Passwords with JavaScript
Killing Passwords with JavaScript
 
Securing the Web without site-specific passwords
Securing the Web without site-specific passwordsSecuring the Web without site-specific passwords
Securing the Web without site-specific passwords
 
Easy logins for PHP web applications
Easy logins for PHP web applicationsEasy logins for PHP web applications
Easy logins for PHP web applications
 
Persona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole WebPersona: a federated and privacy-protecting login system for the whole Web
Persona: a federated and privacy-protecting login system for the whole Web
 
Taking the pain out of signing users in
Taking the pain out of signing users inTaking the pain out of signing users in
Taking the pain out of signing users in
 

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