Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Taking the pain out of signing users in
Search
Francois Marier
July 25, 2013
Programming
340
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
400
Getting Browsers to Improve the Security of Your Webapp
fmarier
0
350
Hardening Firefox for Privacy and Security
fmarier
0
1.2k
Security and Privacy on the Web in 2016
fmarier
0
250
Privacy and Tracking Protection in Firefox
fmarier
0
340
Security and Privacy on the Web in 2015
fmarier
0
440
Security and Privacy on the Web in 2015
fmarier
0
220
Integrity protection for third-party JavaScript
fmarier
1
890
URL to HTML
fmarier
1
350
Other Decks in Programming
See All in Programming
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.8k
業務時間外もAIに働いてもらう話
colorful12
3
10k
大喜利で理解するLLM as a Judge / Understanding LLM-as-a-Judge through Ogiri
rockname
0
100
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
140
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
540
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
460
Heart of Swift Concurrency
koher
0
570
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
1
540
変化を抱擁するドキュメントの作り方 - ビジネスルール駆動開発がもたらす、コードとの新しい関係
ioki
2
200
VueプロジェクトをTypeScript7に対応させる- Side-by-Side戦略による一部高速化 -
koukimiura
0
110
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
490
WebMCP Challenge に星空観察アプリで参加した話
okajun35
0
160
Featured
See All Featured
The Language of Interfaces
destraynor
162
27k
エンジニアに許された特別な時間の終わり
watany
108
250k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Practical Orchestrator
shlominoach
191
12k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
We Are The Robots
honzajavorek
0
370
Designing for humans not robots
tammielis
254
26k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
300
How to Talk to Developers About Accessibility
jct
2
550
Speed Design
sergeychernyshev
33
2.1k
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: