Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Taking the pain out of signing users in
Search
Francois Marier
July 25, 2013
Programming
320
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Taking the pain out of signing users in
Francois Marier
July 25, 2013
More Decks by Francois Marier
See All by Francois Marier
Security and Privacy settings for Firefox Power Users
fmarier
0
380
Getting Browsers to Improve the Security of Your Webapp
fmarier
0
340
Hardening Firefox for Privacy and Security
fmarier
0
1.2k
Security and Privacy on the Web in 2016
fmarier
0
240
Privacy and Tracking Protection in Firefox
fmarier
0
330
Security and Privacy on the Web in 2015
fmarier
0
440
Security and Privacy on the Web in 2015
fmarier
0
210
Integrity protection for third-party JavaScript
fmarier
1
880
URL to HTML
fmarier
1
340
Other Decks in Programming
See All in Programming
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
190
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
500
JJUG CCC 2026 Spring: JSpecify で実現する Kotlin フレンドリーな Java API 設計
ternbusty
1
170
New "Type" system on PicoRuby
pocke
1
930
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
340
Oxcを導入して開発体験が向上した話
yug1224
4
310
「エンジニアインターン、どうやって取った?」準備のリアルを語るLT会 Progate BAR
akiomatic
0
130
JavaDoc 再入門
nagise
1
350
Creating Composable Callables in Contemporary C++
rollbear
0
130
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
520
LLMによるContent Moderationの本番運用の裏側と品質担保への挑戦
suikabar
3
680
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
100
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
130
Designing for Timeless Needs
cassininazir
1
250
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
250
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
530
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Side Projects
sachag
455
43k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Transcript
François Marier – @fmarier Taking the pain out of signing
users in
passwords
problem #1: passwords are hard to secure
None
None
None
None
None
None
None
None
None
bcrypt / scrypt / pbkdf2 per-user salt site secret password
& lockout policies secure recovery
bcrypt / scrypt / pbkdf2 per-user salt site secret password
& lockout policies secure recovery
bcrypt / scrypt / pbkdf2 per-user salt site secret password
& lockout policies secure recovery
bcrypt / scrypt / pbkdf2 per-user salt site secret password
& lockout policies secure recovery
bcrypt / scrypt / pbkdf2 per-user salt site secret password
& lockout policies secure recovery
bcrypt / scrypt / pbkdf2 per-user salt site secret password
& lockout policies secure recovery 2013 2013 password password guidelines guidelines
passwords are hard to secure they are a liability
ALTER TABLE user DROP COLUMN password;
problem #2: passwords are hard to remember
None
None
pick an easy password
use it everywhere
passwords are hard to remember they need to be reset
None
control email account control all accounts =
None
“People want a little dating before marriage.” Eric Vishria –
Rockmelt
None
decentralised
myid.com/u/francois
None
None
existing login systems are not good enough
ideal web-wide identity system
• decentralised simple cross-browser ideal web-wide identity system
• decentralised • simple cross-browser ideal web-wide identity system
• decentralised • simple • cross-browser ideal web-wide identity system
what if it were a standard part of the web
browser?
None
how does it work?
[email protected]
demo #1: http://www.voo.st/
[email protected]
Persona is already a decentralised system
decentralisation is the answer, but it's not a product adoption
strategy
we can't wait for all domains to adopt Persona
we can't wait for all domains to adopt Persona solution:
a temporary centralised fallback
demo #2: http://sloblog.io/
[email protected]
Persona already works with all email domains
identity bridging
demo #3: http://www.reasonwell.com/
[email protected]
None
None
None
None
>= 8
Persona is decentralized, simple and cross-browser
it's simple for users, but is it also simple for
developers?
None
<script src=”https://login.persona.org/include.js”> </script> </body></html>
navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},
function (data) { window.location = '/home'; } ); }, onlogout: function () { window.location = '/logout'; } });
navigator.id.watch({ loggedInUser: "
[email protected]
" onlogin: function (assertion) { $.post('/login', {assertion: assertion},
function (data) { window.location = '/home'; } ); }, 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'; } });
navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},
function (data) { window.location = '/home'; } ); } 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'; } });
None
navigator.id.request()
None
None
None
navigator.id.watch({ loggedInUser: null, onlogin: function (assertion) { $.post('/login', {assertion: assertion},
function (data) { window.location = '/home'; } ); }, 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://123done.org'} ) 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://123done.org'} ) 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://123done.org'} ) data = page.json return data.status == 'okay'
{ status: “okay”, audience: “http://123done.org”, expires: 1344849682560, email: “
[email protected]
”, issuer:
“login.persona.org” }
{ status: “failed”, reason: “assertion has expired” }
None
None
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'; } });
None
1. load javascript library 2. setup login & logout callbacks
3. add login and logout buttons 4. verify proof of ownership
1. load javascript library 2. setup login & logout callbacks
3. add login and logout buttons 4. verify proof of ownership
1. load javascript library 2. setup login & logout callbacks
3. add login and logout buttons 4. verify proof of ownership
1. load javascript library 2. setup login & logout callbacks
3. add login and logout buttons 4. verify proof of ownership
you can add support for Persona in four easy steps
one simple request
None
building a new site: default to Persona
working on an existing site/app: add support for Persona
To learn more about Persona: https://login.persona.org/ http://identity.mozilla.com/ https://developer.mozilla.org/docs/Persona/Quick_Setup https://github.com/mozilla/browserid-cookbook https://developer.mozilla.org/docs/Persona/Libraries_and_plugins
http://123done.org/ https://wiki.mozilla.org/Identity#Get_Involved @fmarier
© 2013 François Marier <
[email protected]
> This work is licensed under
a Creative Commons Attribution-ShareAlike 3.0 New Zealand License. Hotel doorman: https://secure.flickr.com/photos/wildlife_encounters/8024166802/ Top 500 passwords: http://xato.net/passwords/more-top-worst-passwords/ Parchment: https://secure.flickr.com/photos/27613359@N03/6750396225/ Uncle Sam: https://secure.flickr.com/photos/donkeyhotey/5666065982/ Restaurant dinner: https://secure.flickr.com/photos/yourdon/3977084094/ Stop sign: https://secure.flickr.com/photos/artbystevejohnson/6673406227/ Photo credits: