• Save
Idcon11 implicit demo
Upcoming SlideShare
Loading in...5
×
 

Idcon11 implicit demo

on

  • 2,285 views

OAuth Implicit Flow Demo at idcon#11

OAuth Implicit Flow Demo at idcon#11

Statistics

Views

Total Views
2,285
Views on SlideShare
2,282
Embed Views
3

Actions

Likes
5
Downloads
0
Comments
0

1 Embed 3

https://twitter.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Idcon11 implicit demo Idcon11 implicit demo Presentation Transcript

    • OpenID Connect DemoIdCon #11 IDENTITY CONFERENCE @ritou
    • やりません
    • Implicit Flowを考える会IdCon #11 IDENTITY CONFERENCE @ritou
    • OAuth 2.0にはImplicit Flowってのがありまして
    • Client Secretを安全に保管できない場合に 使うことになってます
    • 使いどころ• JavaScriptをインクルードしてClient ID だけ指定して呼び出せばOAuthの処 理やっちゃう系• iOS/Androidのアプリやデスクトップ PCなど、、リバースエンジニアリング 可能なクライアント
    • 今回問題となるのは、
    • いわゆるOAuth認証
    • OAuth 2.0 + Profile API で SSO をImplicitでやる場合
    • 10 OAuth : Implicit Flow ServerClient 1. ログインしたい End User
    • 11 OAuth : Implicit Flow Server 2. Serverさん、 ロッカーの 合鍵くださいClient 1. ログインしたい End User
    • 12 OAuth : Implicit Flow Server 2. Serverさん、 ロッカーの 3. 合鍵あげます 合鍵くださいClient 1. ログインしたい End User
    • 13 OAuth : Implicit Flow Server4. 合鍵を使ってプロフィール情報 のロッカーに アクセス 2. Serverさん、 ロッカーの 3. 合鍵あげます 合鍵ください Client 1. ログインしたい End User
    • 14 OAuth : Implicit Flow Server4. 合鍵を使って ログインプロフィール情報 のロッカーに アクセス 2. Serverさん、 成功 ロッカーの 3. 合鍵あげます 合鍵ください Client 1. ログインしたい End User
    • これがそのまま行われる 合鍵=Access Token
    • 見せましょう
    • 材料• OAuth 2.0のImplicit Flowを利用するClient – Sample Client A できあがったものがこちらです。 https://r- weblife.sakura.ne.jp/idcon11/SampleA.php
    • Access Tokenだけで簡単にログインさせることが できました。
    • Access Tokenだけで簡単にログインさせることが できました。
    • AccessTokenに紐づく人を 認証された人として 扱っています
    • もし、サンプルサイトAの管理者が 悪いことを考えたら
    • 「うちでもらったAccess Token よそでも使えるのでは?」
    • 24 OAuth : Implicit Flow ServerClient 1. ログインしたい End User
    • 25 OAuth : Implicit Flow Server 2. Serverさん、 ロッカーの 合鍵くださいClient 1. ログインしたい End User
    • 26 OAuth : Implicit Flow Server Evil Client 3.こっそり 別の合鍵 2. Serverさん、 あげます ロッカーの 合鍵くださいClient 1. ログインしたい End User
    • 27 OAuth : Implicit Flow Server Evil4. 合鍵を使って Clientプロフィール情報 3.こっそり のロッカーに 別の合鍵 アクセス 2. Serverさん、 あげます ロッカーの 合鍵ください Client 1. ログインしたい End User
    • 28 OAuth : Implicit Flow Server Evil4. 合鍵を使って Client ログインプロフィール情報 3.こっそり のロッカーに 別の合鍵 アクセス 2. Serverさん、 あげます 成功??? ロッカーの 合鍵ください Client 1. ログインしたい End User
    • サイトAがもらったAccessTokenでサイトBのレスポンス中のAccessTokenを置き換える
    • やりましょう
    • 材料• OAuth 2.0のImplicit Flowを利用するClient – Sample Client A – Sample Client B• 悪い管理人 –A できあがったものがこちらです。 https://r-weblife.sakura.ne.jp/idcon11/SampleB.php
    • Access Tokenだけで別人としてログインさせることが できました。
    • これはやばい?
    • Implicit FlowをDisってるわけではない
    • フラグメントで受け取った AccessTokenを信用するしかないしくみだし
    • Access Tokenはリソースアクセスのためのもの
    • わかっててProfile APIの結果でログインさせますか? って話
    • では、そういうClientにログインさせたい場合は どうすれば?
    • そこでOpenID Connect
    • どう違うのか?
    • OpenID Connectでは、認証結果の受け渡しに ID Tokenを使う
    • ID Token=紹介状
    • 43OpenID Connect : Implicit Flow Server Client 1. ログインしたい End User
    • 44OpenID Connect : Implicit Flow Server 2. Serverさん、 証明書と合鍵 ください Client 1. ログインしたい End User
    • 45OpenID Connect : Implicit Flow Server 2. Serverさん、 3. 合鍵と証明書 証明書と合鍵 あげます ください Client 1. ログインしたい End User
    • 46 OpenID Connect : Implicit Flow Server 2. Serverさん、 3. 合鍵と証明書 証明書と合鍵 あげます ください Client 1. ログインしたい End User4. 証明書使って ログイン処理
    • 47 OpenID Connect : Implicit Flow Server5. 合鍵を使ってプロフィール情報 のロッカーに アクセス 3. 合鍵と証明書 2. Serverさん、 証明書と合鍵 あげます ください Client 1. ログインしたい End User 4. 証明書使って ログイン処理
    • 48 OAuth : Implicit Flow Server5. 合鍵を使って これでプロフィール情報 のロッカーに アクセス 3. 合鍵と証明書 2. Serverさん、 いける? 証明書と合鍵 あげます ください Client 1. ログインしたい End User 4. 証明書使って ログイン処理
    • ID Tokenの例• eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3 MiOiJodHRwOlwvXC 9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX2lkIjoi MjQ4Mjg5NzYxMDAxIiwiYXVkIjoiaH R0cDpcL1wvY2xpZW50LmV4YW1wbGUuY29tI iwiZXhwIjoxMzExMjgxOTcwfQ.eDesUD0vzDH 3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ
    • ID Tokenの例• eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3 意味不明 MiOiJodHRwOlwvXC 9zZXJ2ZXIuZXhhbXBsZS5jb20iLCJ1c2VyX2lkIjoi MjQ4Mjg5NzYxMDAxIiwiYXVkIjoiaH R0cDpcL1wvY2xpZW50LmV4YW1wbGUuY29tI iwiZXhwIjoxMzExMjgxOTcwfQ.eDesUD0vzDH 3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ
    • ID Tokenの中身• iss : Server Identifier• user_id :• aud : Client Identifier• exp : (有効期限)• acr : 認証レベルなど• nonce : (リプレイアタック防ぐための文字列)これらをJSON形式にして署名つけたもの
    • ID Tokenを使うメリット• Server,Client,ユーザーID,nonceを含むため、 Clientは自ら送ったリクエストに対するレスポ ンスだということを確認できる
    • OpenID ConnectによってAccess Token置き換え攻撃に気づけるのかやってみた
    • 材料• OAuth 2.0のImplicit Flowを利用するClient – Sample Client A• OpenID ConnectのImplicit Flowを利用するClient – Sample Client C• 悪い管理人 –A できあがったものがこちらです。 https://r-weblife.sakura.ne.jp/idcon11/SampleC.php
    • ID Tokenを使うことでAccess Token置き換え攻撃 にも気づける
    • OpenID Connect やりましょう
    • いや、みなさん、他にも言いたいこと あると思う
    • ID Tokenを置き換えられないの?
    • ID Tokenを置き換えられないの? ↓中のClientIDやらを見て検証すれば気づくはず
    • Access Tokenとの組み合わせも 確認できないよね?
    • Access Tokenとの組み合わせも 確認できないよね? ↓ ID Tokenに Access Tokenのhashつっこむ のを検討中
    • 続きはまたあとで! Twitter/Facebook/Google+ などで質問受け付けます(@_nat,@nov,@ritouあたり)