49
OAuth認証再考からの OpenID Connect @nov

OAuth認証再考からのOpenID Connect #devlove

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: OAuth認証再考からのOpenID Connect #devlove

OAuth認証再考からの OpenID Connect

@nov

Page 2: OAuth認証再考からのOpenID Connect #devlove

Nov Matake

OpenID Foundation Japan

Evangelist 初号機

OAuth.jp

Idcon

Rubyist

fb_graph, rack-oauth2, openid_connect etc.

Page 3: OAuth認証再考からのOpenID Connect #devlove

「○○ ID でログイン」

Page 4: OAuth認証再考からのOpenID Connect #devlove

ユーザー登録めんどくさい

Page 5: OAuth認証再考からのOpenID Connect #devlove

複数サイトで共通のパスワード

Page 6: OAuth認証再考からのOpenID Connect #devlove

「○○ ID でログイン」

Page 7: OAuth認証再考からのOpenID Connect #devlove

OpenID / OAuth

Page 8: OAuth認証再考からのOpenID Connect #devlove

http://janrain.com/blog/social-login-trends-across-the-web-for-q3-2013/

Page 9: OAuth認証再考からのOpenID Connect #devlove
Page 10: OAuth認証再考からのOpenID Connect #devlove

OAuth 認証 … って言うな …

Page 11: OAuth認証再考からのOpenID Connect #devlove

定義: OAuth 認証

外部サービスが提供する OAuth 1.0/2.0

ベースの “Proprietary” な Profile API を 使ってユーザー認証を行うこと。

Page 12: OAuth認証再考からのOpenID Connect #devlove
Page 13: OAuth認証再考からのOpenID Connect #devlove

Proprietary

Page 14: OAuth認証再考からのOpenID Connect #devlove
Page 15: OAuth認証再考からのOpenID Connect #devlove
Page 16: OAuth認証再考からのOpenID Connect #devlove
Page 17: OAuth認証再考からのOpenID Connect #devlove

GET /me のところを差し替えると他の ID Provider も使える

Page 18: OAuth認証再考からのOpenID Connect #devlove

THE

Page 19: OAuth認証再考からのOpenID Connect #devlove

OAuth 認証の落とし穴

Page 20: OAuth認証再考からのOpenID Connect #devlove
Page 21: OAuth認証再考からのOpenID Connect #devlove
Page 22: OAuth認証再考からのOpenID Connect #devlove

GET /me

User Info

:

Page 23: OAuth認証再考からのOpenID Connect #devlove

GET /me

User Info

:

Weak Point

Page 24: OAuth認証再考からのOpenID Connect #devlove

GET /me

User Info

:

Token Replace

Weak Point

Page 25: OAuth認証再考からのOpenID Connect #devlove

GET /me

User Info

:Different User Data

Token Replace

Weak Point

Page 26: OAuth認証再考からのOpenID Connect #devlove

GET /me

User Info

:

4者目がいる時は注意 !!

Page 27: OAuth認証再考からのOpenID Connect #devlove

見ず知らずの他アプリ向けの Tokenを受けいれてはならない

Page 28: OAuth認証再考からのOpenID Connect #devlove

GET /me

User Info

GET /app

App IDAnother Proprietary

Page 29: OAuth認証再考からのOpenID Connect #devlove

4 API Request

毎ログインごとに

GET /oauth/authorize

POST /oauth/token

GET /app

GET /me

Page 30: OAuth認証再考からのOpenID Connect #devlove

#MA7 Mashup Caravan & Meetup in Kyoto

♥OpenID Connect

OAuth 2.0 + Standardised Identity Layer

Page 31: OAuth認証再考からのOpenID Connect #devlove
Page 32: OAuth認証再考からのOpenID Connect #devlove

ID Token

User Info API

Page 33: OAuth認証再考からのOpenID Connect #devlove

ID Token

認証イベントのアサーション (JSON Web Token)

iss – Issuer

sub – Subject, End-user Identifier

aud – Audience, Client ID

iat - issued at

exp - expiry

Page 34: OAuth認証再考からのOpenID Connect #devlove
Page 35: OAuth認証再考からのOpenID Connect #devlove

誰が (issuer = IdP) 誰を (subject = end-user)

誰のために (audience = client) 認証したのか

Page 36: OAuth認証再考からのOpenID Connect #devlove

ID Token Verification

Verify Signature (RSA-SHA256 etc.)

Verify Claims

iss => Expected IdP ?

aud => Own Client ID ?

iat => Within X mins ?

exp => Future ?

Get “sub”

Page 37: OAuth認証再考からのOpenID Connect #devlove

ID Token

User Info API

Page 38: OAuth認証再考からのOpenID Connect #devlove

ID Token

User Info APIID Token さえあれば認証可能

Page 39: OAuth認証再考からのOpenID Connect #devlove

UserInfo API

OAuth 2.0 対応の API Endpoint

レスポンスフォーマット標準化

ID 連携に必要なプロフィールデータは割と似てる

User ID, 氏名, ニックネーム, 生年月日, 住所 etc.

登録時だけ利用 ?

Page 40: OAuth認証再考からのOpenID Connect #devlove
Page 41: OAuth認証再考からのOpenID Connect #devlove

Discovery & Dynamic Registration

Page 42: OAuth認証再考からのOpenID Connect #devlove

User Centric means Dynamic

Page 43: OAuth認証再考からのOpenID Connect #devlove

developers.facebook.com でアプリ登録

client_id & client_secret をアプリに埋め込む

必要な API Endpoint とレスポンスフォーマットも API

Document 読んで把握

Page 44: OAuth認証再考からのOpenID Connect #devlove

developers.facebook.com でアプリ登録

client_id & client_secret をアプリに埋め込む

必要な API Endpoint とレスポンスフォーマットも API

Document 読んで把握

全部自動化

Page 45: OAuth認証再考からのOpenID Connect #devlove

Discovery

WebFinger (RFC 7033)

GET /.well-known/webfinger?resource=***

OpenID Connect をサポートしてるかどうか

OP Config

GET /.well-known/openid-configuration

OpenID Connect の各 endpoint 等

Page 46: OAuth認証再考からのOpenID Connect #devlove

Dynamic Registration

Client Registration Endpoint (Discoverable)

Standardised Client Metadata

redirect_uris, response_types, grant_types, application_type, client_name, logo_uri etc.

Page 47: OAuth認証再考からのOpenID Connect #devlove
Page 48: OAuth認証再考からのOpenID Connect #devlove

Harder Things? slideshare.net/nat_sakimura/open-id-specificationsworkupdatetokyo2011

Page 49: OAuth認証再考からのOpenID Connect #devlove

openid-foundation-japan.github.com

slideshare.net/matake

github.com/nov

twitter.com/nov