distributed identities with openid

56
Distributed Identities with OpenID Bastian Hofmann VZnet Netzwerke Ltd.

Upload: bastian-hofmann

Post on 04-Dec-2014

2.545 views

Category:

Technology


0 download

DESCRIPTION

Talk about Distributed Identities with OpenID from the Confoo Conference

TRANSCRIPT

Page 1: Distributed Identities with OpenID

Distributed Identities with OpenID

Bastian HofmannVZnet Netzwerke Ltd.

Page 2: Distributed Identities with OpenID

About me

Page 3: Distributed Identities with OpenID

OpenID is dead

Page 5: Distributed Identities with OpenID

„OpenID is the worst possible "solution" I have ever seen in my entire life to a problem that most people don't really have.“

Yishan Wong (Facebook)

http://www.quora.com/What-s-wrong-with-OpenID

Page 6: Distributed Identities with OpenID

Facebook Connect250,000,000 monthly users

Page 7: Distributed Identities with OpenID

So why are you here?

Page 8: Distributed Identities with OpenID

• Why identity management is still a problem

• OpenID how it works, and why it fails

• OpenID Connect & OAuth2: OpenIDs future?

• What can browser vendors do?

Page 9: Distributed Identities with OpenID

Questions? Ask!

Page 10: Distributed Identities with OpenID

Only one identity?

Page 11: Distributed Identities with OpenID

Identity is conveyed by communication

Identity is not fixed but recreated by every communication with your fellows

Expectations of different people result in different identities

Lothar Krappmann

Page 13: Distributed Identities with OpenID
Page 14: Distributed Identities with OpenID

Sign up again and again

Page 15: Distributed Identities with OpenID

Passwords are broken

Same password for more than one service

Names, birthdays, car brand, ...

Too short, too simple

Saved unsecurely in the browser

Disclosed to others

Sent over non encrypted connections

Page 16: Distributed Identities with OpenID

Single Sign On

Page 17: Distributed Identities with OpenID

Microsoft Live ID

Launched 1999 as .net Passport

Page 18: Distributed Identities with OpenID

Facebook Connect

Page 19: Distributed Identities with OpenID
Page 20: Distributed Identities with OpenID

And there are much more

Page 21: Distributed Identities with OpenID

Nascar problem

Page 22: Distributed Identities with OpenID

http://www.janrain.com/

Aggregation: Janrain

Page 23: Distributed Identities with OpenID

http://openid.net/

OpenID

Page 24: Distributed Identities with OpenID

The Client

Page 25: Distributed Identities with OpenID

<link rel="openid.server" href="http://www.myopenid.com/server" /><link rel="openid2.provider" href="http://www.myopenid.com/server" />

<meta http-equiv="X-XRDS-Location" content="http://bhofmann.myopenid.com/" /> <link rel="openid2.provider" href="http://www.myopenid.com/server" /> <link rel="openid2.local_id" href="http://bhofmann.myopenid.com/" /> <link rel="openid.server" href="http://www.myopenid.com/server" /> <link rel="openid.delegate" href="http://bhofmann.myopenid.com/" />

Delegation

Discovery

Page 26: Distributed Identities with OpenID

Connection Flow

Page 27: Distributed Identities with OpenID

DEMO

Page 28: Distributed Identities with OpenID

Who is the user?

Is this really user X?

Is X allowed to do something?

Does X have the permission?

VS

Client sites want more than just a unique identifier (Social Graph)

Authentication vs Authorization

Page 29: Distributed Identities with OpenID

But there are Spec Extensions

Page 30: Distributed Identities with OpenID

• Allows to specify certain fields in request that must or should be returned by the Identity Provider

openid.sreg.required=openid.sreg.fullname&openid.sreg.optional=openid.sreg.email,openid.sreg.gender

openid.sreg.fullname=Bastian&openid.sreg.gender=male

Simple Registration

Page 31: Distributed Identities with OpenID

• Fetch Requestpenid.ns.ax=http://openid.net/srv/ax/1.0openid.ax.mode=fetch_requestopenid.ax.type.fname=http://example.com/schema/fullnameopenid.ax.type.gender=http://example.com/schema/genderopenid.ax.type.fav_dog=http://example.com/schema/favourite_dogopenid.ax.type.fav_movie=http://example.com/schema/favourite_movieopenid.ax.count.fav_movie=3openid.ax.required=fname,genderopenid.ax.if_available=fav_dog,fav_movieopenid.ax.update_url=http://idconsumer.com/update?transaction_id=a6b5c41

Attribute Exchange

Page 32: Distributed Identities with OpenID

• Fetch Responseopenid.ns.ax=http://openid.net/srv/ax/1.0openid.ax.mode=fetch_responseopenid.ax.type.fname=http://example.com/schema/fullnameopenid.ax.type.gender=http://example.com/schema/genderopenid.ax.type.fav_dog=http://example.com/schema/favourite_dogopenid.ax.type.fav_movie=http://example.com/schema/favourite_movieopenid.ax.value.fname=John Smithopenid.ax.count.gender=0openid.ax.value.fav_dog=Spotopenid.ax.count.fav_movie=2openid.ax.value.fav_movie.1=Movie1openid.ax.value.fav_movie.2=Movie2openid.ax.update_url=http://idconsumer.com/update?transaction_id=a6b5c41

Attribute Exchange

Page 33: Distributed Identities with OpenID

• Store Requestopenid.ns.ax=http://openid.net/srv/ax/1.0openid.ax.mode=store_requestopenid.ax.type.fname=http://example.com/schema/fullnameopenid.ax.value.fname=Bob Smithopenid.ax.type.fav_movie=http://example.com/schema/favourite_movieopenid.ax.count.fav_movie=2openid.ax.value.fav_movie.1=Movie1openid.ax.value.fav_movie.2=Movie2

openid.ns.ax=http://openid.net/srv/ax/1.0openid.ax.mode=store_response_success

Attribute Exchange

• Store Respons

Page 34: Distributed Identities with OpenID

+----------+ +---------------+ | -+----(B)-- Request Token -------->| | | End-user | | Authorization | | at |<---(C)-- User authenticates --->| Server | | Browser | | | | -+----(D)-- Verifier -------------<| | +-|----|---+ +---------------+ | | ^ v (B) (D) | | | | | | ^ v | | +---------+ | | | |>---(A)-- Redirect URL ---------------| | | Web |<---(A)-- Request Token + Secret -----| | | Client |>---(E)-- Request Token, Verifier ----' | | |<---(E)-- Access Token + Secret -------------' +---------+

Every Request: Client Credentials, Nonce, Timestamp, Signature

http://oauth.net/

OAuth 1.0a Flow

Page 35: Distributed Identities with OpenID

• Combines OpenID Authentication and OAuth authorization

openid.ns.oauth=http://specs.openid.net/extensions/oauth/1.0&openid.oauth.consumer=123456

openid.ns.oauth=http://specs.openid.net/extensions/oauth/1.0&openid.oauth.request_token=7890

OpenID + OAuth

Page 36: Distributed Identities with OpenID

Failures of OpenID 2.0

Complex to implement

URL as identifier => Bad User Experience

Do you have an OpenID?

What is it?

No marketing

Page 37: Distributed Identities with OpenID

How to fix it?

Page 38: Distributed Identities with OpenID

Easier to implement

More simple specification

Better user experience

wider adption

Built on top of OAuth 2.0

Page 39: Distributed Identities with OpenID

What‘s wrong with OAuth?

Does not work well with non web or JavaScript based clients

The „Invalid Signature“ Problem

Complicated Flow, many requests

Page 40: Distributed Identities with OpenID

http://tools.ietf.org/html/draft-ietf-oauth-v2

What‘s new in OAuth2? (Draft 10)

Different client profiles

No signatures

No Token Secrets

Cookie-like Bearer Token

No Request Tokens

Much more flexible regarding extensions

Mandatory TSL/SSL

Page 41: Distributed Identities with OpenID

+----------+ Client Identifier +---------------+ | -+----(A)--- & Redirect URI ------>| | | End-user | | Authorization | | at |<---(B)-- User authenticates --->| Server | | Browser | | | | -+----(C)-- Authorization Code ---<| | +-|----|---+ +---------------+ | | ^ v (A) (C) | | | | | | ^ v | | +---------+ | | | |>---(D)-- Client Credentials, --------' | | Web | Authorization Code, | | Client | & Redirect URI | | | | | |<---(E)----- Access Token -------------------' +---------+ (w/ Optional Refresh Token)

Web-Server Profile

Page 42: Distributed Identities with OpenID

+----------+ Client Identifier +----------------+ | |>---(A)-- & Redirection URI --->| | | | | | End <--+ - - - +----(B)-- User authenticates -->| Authorization | User | | | Server | | |<---(C)--- Redirect URI -------<| | | Client | with Access Token | | | in | in Fragment +----------------+ | Browser | | | +----------------+ | |>---(D)--- Redirect URI ------->| | | | without Fragment | Web Server | | | | with Client | | (F) |<---(E)--- Web Page with ------<| Resource | | Access | Script | | | Token | +----------------+ +----------+

User-Agent Profile

Page 43: Distributed Identities with OpenID

What happend to signatures?

Bearer Tokens are fine over secure connection

Vulnerable if discovery is introduced

Or if TSL/SSL is not possible

Ongoing controvers discussion

Page 44: Distributed Identities with OpenID

Scopes

Optional parameter for provider specific implementations

Additional return values

Access Control

Page 45: Distributed Identities with OpenID

http://openidconnect.com/

Scope: „openid“

With access token additional values are returned

UserID: URL to Portable Contacts endpoint

TimestampSignature

Page 46: Distributed Identities with OpenID

DEMO

Page 47: Distributed Identities with OpenID

OpenID Connect Discovery

Get Identifier of user

Look for a link pointing to the OpenID Connect endpoints in the returned LRDD

Call /.well-­‐known/host-­‐meta file at the domain of the user‘s provider

Page 48: Distributed Identities with OpenID

Phishing

Page 49: Distributed Identities with OpenID

E-mail address equals identity?

@

Page 50: Distributed Identities with OpenID

Can the browser help?

Page 51: Distributed Identities with OpenID

http://esw.w3.org/Foaf%2Bssl

FOAF+SSL (WebID)

Page 52: Distributed Identities with OpenID

DEMO

Page 53: Distributed Identities with OpenID

Bad browser UI

Syncing between different computers?

More than one user on the same computer?

Page 54: Distributed Identities with OpenID

UX Mockups Mozilla Weave

Page 55: Distributed Identities with OpenID

• We need a single sign on system for the web

• OpenID is cool, but has some problems

• Proprietary solutions are bad for users, site owners and developers

• A new more simple and flexible spec is coming up

• Browser vendors are working to solve this problem in the browser

Summing it up