OAuth FTW

47
OAuth FTW Chris Messina Future of Web Apps October 10, 2008 London, England How OAuth and portable data can revolutionize your web app (FOR THE WIN)

description

The talk I gave at FOWA London about OAuth.

Transcript of OAuth FTW

Page 1: OAuth FTW

OAuth FTW

Chris MessinaFuture of Web Apps

October 10, 2008London, England

How OAuth and portable data can revolutionize your web app

(FOR THE WIN)

Page 2: OAuth FTW

OAuth |ō| |ôˌθ|Noun.

An open protocol that allows secure API authorization in a simple and standard method from desktop, web and mobile applications.

Page 3: OAuth FTW

The story of OAuth starts with OpenID.

Page 4: OAuth FTW

factoryjoe.com

Page 5: OAuth FTW

?!X

factoryjoe.com

Page 6: OAuth FTW

!

Page 7: OAuth FTW

Can has OpenID?

? X

factoryjoe.com

Page 8: OAuth FTW

B-b-but what about API apps?

X

(APPLICATION PROGRAMMING INTERFACE)

Page 9: OAuth FTW
Page 10: OAuth FTW

?

Page 11: OAuth FTW

!?!

Page 12: OAuth FTW

How much are your username and password worth?

Page 13: OAuth FTW

wayn.com

Page 14: OAuth FTW
Page 15: OAuth FTW

imeem.com

Page 16: OAuth FTW
Page 17: OAuth FTW
Page 18: OAuth FTW

PC Load Letter?! What the f...!

Page 19: OAuth FTW

The Password Anti-pattern!

Page 20: OAuth FTW

Passwords are not confetti.

Page 21: OAuth FTW

Please stop throwing them around.

Page 22: OAuth FTW

Especially if they’re not yours.

Page 23: OAuth FTW

OAuth replaces the need for usernames and passwords with tokens and a hashing signature.

Page 24: OAuth FTW

let’s take a look

Page 25: OAuth FTW

Brightkite > pings Fire Eagle for Request Token

Fire Eagle > returns authorization realm

Page 26: OAuth FTW

Brightkite > requests that user authorize Brightkite

Fire Eagle > user authenticates through Yahoo! accounts

Page 27: OAuth FTW

Fire Eagle > user grants authorization to Brightkite

Fire Eagle > Fire Eagle redirects user to callback URL

Page 28: OAuth FTW

Brightkite > asks FE to exchange Request Token for Access Token

Fire Eagle > checks signature; if valid, returns Access Token

...subsequent requests are signed with this Access Token

Page 29: OAuth FTW

users can manage access...

Page 30: OAuth FTW

...and change access

Page 31: OAuth FTW

or can revoke access later without having to change their primary account password

(i.e. if they lose their phone or their computer gets stolen)

Page 32: OAuth FTW

?

Page 33: OAuth FTW

discovery

Page 34: OAuth FTW

Identity -› Discovery -› Authorization

Page 35: OAuth FTW

OpenID -› XRDS-Simple -› OAuth Endpoint

(EXTENSIBLE RESOURCE IDENTIFIER RESOLUTION)

Page 36: OAuth FTW

Identity -› Discovery -› [Authentication] -› Authorization

Page 37: OAuth FTW

http://will.norris.name

☟<meta http-equiv="X-XRDS-Location" content="http://will.norris.name/?xrds" />

Page 38: OAuth FTW

OpenID XRDS

<?xml version="1.0" encoding="UTF-8"?><xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/signon</Type> <Type>http://openid.net/sreg/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/phishing-resistant</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/multi-factor</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/multi-factor-physical</Type> <URI>https://pip.verisignlabs.com/server</URI> <LocalID>https://recordond.pip.verisignlabs.com/</LocalID> </Service> </XRD></xrds:XRDS>

Page 39: OAuth FTW

XRDS-Simple for Portable Contacts

<?xml version="1.0" encoding="UTF-8"?><xrds:XRDS xmlns:xrds="xri://$xrds" xmlns:openid="http://openid.net/xmlns/1.0" xmlns="xri://$xrd*($v*2.0)"> <XRD version="2.0"> <Type>xri://$xrds*simple</Type> <Service> <Type>http://portablecontacts.net/spec/1.0</Type> <URI>http://pulse.plaxo.com/pulse/pdata/contacts</URI> </Service> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/signon</Type> <Type>http://openid.net/sreg/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/phishing-resistant</Type> <Type>http://openid.net/srv/ax/1.0</Type> <URI>http://www.myopenid.com/server</URI> <LocalID>http://brian.myopenid.com/</LocalID> </Service> </XRD></xrds:XRDS>

Page 40: OAuth FTW

XRDS-Simple for Portable Contacts

<XRD version="2.0"> <Type>xri://$xrds*simple</Type> <Service> <Type>http://portablecontacts.net/spec/1.0</Type> <URI>http://pulse.plaxo.com/pulse/pdata/contacts</URI> </Service> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/signon</Type> <Type>http://openid.net/sreg/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/... <Type>http://openid.net/srv/ax/1.0</Type>

...

Page 41: OAuth FTW

XRDS-Simple for Portable Contacts

<XRD version="2.0"> <Type>xri://$xrds*simple</Type> <Service> <Type>http://portablecontacts.net/spec/1.0</Type> <URI>http://soocial.com/contacts.xml</URI> </Service> <Service priority="0"> <Type>http://specs.openid.net/auth/2.0/signon</Type> <Type>http://openid.net/sreg/1.0</Type> <Type>http://openid.net/extensions/sreg/1.1</Type> <Type>http://schemas.openid.net/pape/policies/2007/06/... <Type>http://openid.net/srv/ax/1.0</Type>

...

Page 42: OAuth FTW

adoption

Page 43: OAuth FTW

•OpenSocial

•MySpace

•Google

•Yahoo! (Fire Eagle)

•Netflix

•SmugMug

•Photobucket

•Plaxo

•Soocial.com

•Meetup.com

•Ma.gnolia

•Get Satisfaction

•Agree2

•SoundCloud

•88Miles

•Pownce

•Brightkite

•Praized

http://wiki.oauth.net/ServiceProviders

Page 44: OAuth FTW

code

Page 45: OAuth FTW

•C#

•Coldfusion

•Java

•Javascript

•Jifty

•.NET

•Objective-C

•OCaml

•Perl

•PHP

•CakePHP

•Python

•Ruby

•...interest in XMPP

http://oauth.net/code

Page 46: OAuth FTW

the pitch

Page 47: OAuth FTW

fin.

oauth.netme -› factoryjoe.com