SlideShare a Scribd company logo
これからのネイティブアプリにおける 
OpenID Connectの活用 
@kura_lab @nov
倉林 雅(通称: kura) 
OpenID ファウンデーション・ジャパン 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
エバンジェリスト 
ヤフー株式会社 IDサービス エンジニア 
ID厨 
@kura_lab
Nov Matake 
OpenID Foundation Japan 
Evangelist 初号機 
OAuth.jp 
Idcon 
Rubyist 
fb_graph, rack-oauth2, openid_connect etc. 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID ファウンデーション・ジャパン 
2008年設立 
OpenID TechNight 
翻訳・教育 WG 
トラストフレームワーク WG 
Enterprise Identity WG 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Japan Identity Cloud Summit 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
#idcon 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect 
x 
ユーザー認証 
@kura_lab
これまでつくったアプリを 
思い出してみよう 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. iPhone Apps by AxsDeny
Facebookログインを 
つかってますか? 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. click click by Tim Franklin Photography
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OAuth 2.0 の Implicit フロー 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
User’s 
Browser 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
Your App 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
Facebook 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
アプリ表示 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
Source: developers.facebook.com
ダイアログ表示 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
access token 取得 
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
APIリクエスト 
Source: developers.facebook.com
トークン置き換え攻撃 
の脆弱性 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
トークン置き換え攻撃 
の脆弱性 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
【メモ】 
ネイティブアプリの多くはバックエンドに 
自前のサーバーがあり通信を行う 
アプリからバックエンドサーバーにアクセストークンを 
送って認証すると脆弱性が生まれる
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
Your Server 
GET /me 
User Info 
: 
Source: developers.facebook.com 
Your App
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
Weak Point 
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
access token 
トークン置き換え 
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
access token 
トークン置き換え 
Source: developers.facebook.com 
【メモ】 
悪意ある開発者が別のアプリで他人のアクセストークンを取得する 
そのアクセストークンを置き換えてバックエンドサーバーに送信する
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
Source: developers.facebook.com 
× 他人のユーザデータ
アクセストークンを発行したクライアントを検証せずに 
ユーザ情報を取得してしまうと謝ったユーザで認証を行ってしまう 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
Source: developers.facebook.com 
【メモ】 
× 他人のユーザデータ
クライアントの制限 
Audience Restriction 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. security checked at Schiphol by sharyn morrow
【メモ】 
前述のImplicitフローはSDKで実装されるケースが多いが、 
バックエンドサーバにアクセストークンを渡すことを想定していない 
クライアントの制限をせずにトークンを受け入れると問題が発生する 
クライアントの制限 
Audience Restriction 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. security checked at Schiphol by sharyn morrow
ID Token? 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
Question Mark Block by Jared Cherup
ID Token? 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
Question Mark Block by Jared Cherup 
【メモ】 
Implicitを使ってサーバーサイドで認証を行う際には 
OpenID Connectの仕様にあるID Tokenを用いることで 
トークン置き換え攻撃の脆弱性を防ぐことができる
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
. 
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 
MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm 
NvbS9pc19yb290Ijp0cnVlfQ 
. 
dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF 
WFOEjXk 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
. 
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 
MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm 
NvbS9pc19yb290Ijp0cnVlfQ 
. 
dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF 
WFOEjXk 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
【メモ】 
OpenID Connectで用いられるid_tokenパラメーターのサンプル
JSONオブジェクト, Base64 
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
. 
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 
MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm 
NvbS9pc19yb290Ijp0cnVlfQ 
. 
dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF 
WFOEjXk 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
. 
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 
MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm 
NvbS9pc19yb290Ijp0cnVlfQ 
. 
dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF 
WFOEjXk 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
ヘッダー部
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
. 
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 
MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm 
NvbS9pc19yb290Ijp0cnVlfQ 
. 
dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF 
WFOEjXk 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
ペイロード部
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
. 
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4 
MTkzODAsDQogImh0dHA6Ly9leGFtcGxlLm 
NvbS9pc19yb290Ijp0cnVlfQ 
. 
dBjftJeZ4CVPmB92K27uhbUJU1p1r_wW1gF 
WFOEjXk 
署名, HMAC-SHA256 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
JSONオブジェクト 
{“typ”:”JWT”, 
“alg”:"HS256"} 
! 
{“iss”:”https://auth.yahoo.co.jp”, 
“sub”:”123456789”, 
“aud”:”abcdefg, 
“nonce”:”xyz”, 
“iat”:1291836800, 
“exp”:1300819380} 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
ヘッダー部 
ペイロード部
iss: issuer, トークンの発行者 
aud: audience, クライアント識別子 
sub: subject, ユーザー識別子 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
{“typ”:”JWT”, 
“alg”:"HS256"} 
! 
{“iss”:”https://auth.yahoo.co.jp”, 
“sub”:”123456789”, 
“aud”:”abcdefg, 
“nonce”:”xyz”, 
“iat”:1291836800, 
“exp”:1300819380} 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
audience 
= クライアント識別子
ID Tokenでわかること 
isser が audience のために 
subject を認証する 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ID Tokenでわかること 
isser が audience のために 
subject を認証する 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
【メモ】 
サーバーサイドでID Tokenを受け取りaudienceを検証することで 
他のアプリで発行されたトークンと区別することができる
リプレイアタックの対処法 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. DA-SC-91-05372 by U.S. Army Korea (Historical Image Archive)
リプレイアタックの対処法 
【メモ】 
サーバーサイドでトークンの検証をおこなうため 
リプレイアタックの対策をしなければならない 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. DA-SC-91-05372 by U.S. Army Korea (Historical Image Archive)
nonce = number used once 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
nonce = number used once 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
【メモ】 
ID Tokenにはリプレイアタック対策のnonceが導入されている
{“typ”:”JWT”, 
“alg”:"HS256"} 
! 
{“iss”:”https://auth.yahoo.co.jp”, 
“sub”:”123456789”, 
“aud”:”abcdefg, 
“nonce”:”xyz”, 
“iat”:1291836800, 
“exp”:1300819380} 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
リクエストごとに 
ユニークな文字列
ID Tokenで対策 
トークン置き換え攻撃 
リプレイアタック 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Armour on display in the War Gallery by Royal Armouries
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
Source: developers.facebook.com
nonceを生成リクエスト 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
Source: developers.facebook.com
access token 
ID Token 
(nonce) 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
Source: developers.facebook.com
ID Token 
(nonce) 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
Source: developers.facebook.com 
トークン置き換え
【メモ】 
前述の脆弱性の例ではアクセストークンをサーバーに送信していたが 
アクセストークンは認証のための仕組みではないため利用しない 
かわりにID Tokenを送信して検証する 
ID Token 
(nonce) 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
GET /me 
User Info 
: 
Source: developers.facebook.com 
トークン置き換え
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
ID Token 
(nonce) 
GET /me 
検User 証でInfo 
不正を防止 
: 
Source: developers.facebook.com
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
ID Token 
(nonce) 
GET /me 
検User 証でInfo 
不正を防止 
: 
Source: developers.facebook.com 
【メモ】 
署名の検証、audienceなどをチェックして 
問題なければログイン状態にする
ネイティブアプリに 
鍵を埋め込む? 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. iPhone 5S white vs. iPhone 5 black/slate by Morid1n
ネイティブアプリに 
鍵を埋め込む? 
【メモ】 
ここまでサーバーサイドでの認証をみてきたがクライアントサイドに注目 
ID Tokenにおける署名検証に用いる鍵についての紹介 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. iPhone 5S white vs. iPhone 5 black/slate by Morid1n
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
署名? 
HMAC-SHA1? 
HMAC-SHA256?
共通鍵暗号と公開鍵暗号 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
共通鍵暗号と公開鍵暗号 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
【メモ】 
署名検証に共通鍵暗号を用いた場合は署名生成時と同一の鍵で検証する 
公開鍵暗号を用いた場合は署名生成時に用いた秘密鍵ではなく 
公開鍵を用いて検証する
ネイティブアプリに 
共通鍵(secret)を 
埋め込むべきではない 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ネイティブアプリに 
共通鍵(secret)を 
埋め込むべきではない 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
【メモ】 
署名に共通鍵暗号を用いる場合は 
鍵が漏洩すると署名を偽装されてしまう危険性がある
ID Token 
暗号化アルゴリズム 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Security by jan.gosmann
HMAC 
RSA 
ECDSA 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
共通鍵暗号 
公開鍵暗号 
! 
※現在のDraft
公開鍵暗号の署名検証 
共通鍵(secret)を 
埋め込む必要がなくなる 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
公開鍵暗号の署名検証 
共通鍵(secret)を 
埋め込む必要がなくなる 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
【メモ】 
サーバーサイドでは鍵の漏洩しにくいため共通鍵暗号でもよい 
ネイティブアプリではアプリ内部をのぞかれる可能性があるため 
漏洩してもよい公開鍵暗号を選択するとよい
ID Tokenで 
ユーザー認証を! 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Passport by jpmatth
ID Token + OAuth 2.0 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
2011~
これからのネイティブアプリにおけるOpenID Connectの活用
詳しくは 
http://openid.net/connect/ 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect 
x 
Device AuthN 
@nov
Developer  Device IDs
Device IDs 
iOS 
UDID (dead) 
UUID 
Vendor Identifier 
Advertising Identifier 
Device Token (push) 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
! 
Android 
Android ID 
others?
http://www.atmarkit.co.jp/ait/articles/1211/06/news004.html
Developer  Bearer Tokens
Bearer Tokens 
そのトークンを所有しているという事実が 
そのトークンを利用するための唯一の条件 
! 
! 
! 漏れたらオワリ 
プロキシ挟めば書き換え可能 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
v.s
Developer  公開鍵暗号
公開鍵暗号(こうかいかぎあんごう、Public key cryptosystem) 
とは、暗号化と復号に別個の鍵(手順)を使い、暗号化の為の鍵を 
公開できるようにした暗号方式である。1980年代にかけ、日本で 
紹介された直後は「公衆暗号系」と訳されていた。 
暗号は通信の秘匿性を高めるための手段だが、それに必須の鍵もま 
た情報なので、鍵自体を受け渡す過程で盗聴されてしまうリスクが 
あり、秘匿性を高める障害だった。この問題に対して、暗号化鍵の 
配送問題を解決したのが公開鍵暗号である。 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
http://ja.wikipedia.org/wiki/公開鍵暗号
秘密鍵を渡さずに 
! 公開鍵だけを渡して 
! 秘密鍵を持っていることを証明できる 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
デバイス上のKeyChainに 
鍵ペアを生成すれば 
秘密鍵を渡さずに 
! 公開鍵だけを渡して 
! 秘密鍵を持ってるデバイスを認証できる 
…こういうのを HoK (Holder of Key) 方式とか言うらしい 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Self-Issued IdP 
ID Token ベース 
Subject (sub) は公開鍵のハッシュ値 (SHA256) 
公開鍵自体を ID Token に含める 
秘密鍵使って署名 
詳しくは OpenID Connect Core - Section 7 参照 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
これからのネイティブアプリにおけるOpenID Connectの活用
セキュアストレージ 
バックアップ可能 
iCloud 連携も可能 
RSA Key Pair 生成 
RSA 署名処理 
iOS is ready.
これからのネイティブアプリにおけるOpenID Connectの活用
これからのネイティブアプリにおけるOpenID Connectの活用
Self-Issued IdP 
ID Token ベース 
Subject (sub) は公開鍵のハッシュ値 (SHA256) 
公開鍵自体を ID Token に含める 
秘密鍵使って署名 
詳しくは OpenID Connect Core - Section 7 参照 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
Developer  Device IDs
Action!! 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
Festival of Fools by Jett Loe
2014.2.25 
OpenID Connect 
仕様最終版へ!! 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. 
Nate and Birthday Cake (2 of 5) by Chris Pencis
日本語翻訳準備中… 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Dictionary by Chris
2014.3.7 
OpenID TechNight 
@nov 
Copyright 2013 OpenID Foundation Japan - All Rights Reserved. Join Us! by Doran
これからのネイティブアプリにおけるOpenID Connectの活用

More Related Content

これからのネイティブアプリにおけるOpenID Connectの活用