More Related Content More from OpenID Foundation Japan More from OpenID Foundation Japan (20) OpenID Connect 概要 (2013年9月)2. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connectとは
http://openid.net/connect
OAuth 2.0 仕様をベースに「アイデンティティ
層」を拡張した、OpenIDの次期バージョン
1
• OP(認可サーバー)へのユーザー認証の一元化
RP(クライアント)間の
シングル・サインオン
• OP側へのユーザーのクレデンシャル(パスワードなど)
管理の一元化
RP側のセキュリティ
向上と管理負荷の低減
• OPからのユーザー属性情報取得
RPでの新規ユーザー
登録の容易化
• エンドユーザーの認証とAPIアクセス認可の一体化ユーザー利便性の向上
3. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connectは「OpenIDをOAuth 2.0ベースに
作り直す」というだけではない
既存のID連携仕様であ
る SAMLやWS-
Federationの実世界で
の適用パターン、そし
て事業者独自のアイデ
ンティティAPI
(Facebook Connectな
ど) を分析し、仕様化
したものとなっている
2
Source: http://civics.com/openid-connect-webinar/
OpenID Connectの系図
4. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connectによるフェデレーションの中心は
「IDトークン」
エンドユーザの関与の元、
RPがOPに「IDトークン」
というデータを要求する
(認可リクエスト)
OPはエンドユーザーの認証
と、情報およびサービス
提供に関する同意を確認
し、IDトークンをRPに返却
RPはこの「IDトークン」を
用いてエンドユーザーを
識別し、アクセス可否を
行う
3
5. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
IDトークンの中身
OPにおけるユーザ認証イベントの情報
「このエンドユーザーは○○で、何時何分に、こういう方法で認証を受け、認証レ
ベルは○で、…」
RPは主に、IDトークンに含まれる以下のクレーム(OPがユーザーに関して表
明する情報)を用いて、エンドユーザーのアクセス認可を行う
エンドユーザーを識別する値(識別子)
IDトークンの有効期限
ユーザ認証を実施した日時
認証コンテクスト・クラス・リファレンス
認証手段リファレンス
IDトークンにはこの他に
ユーザー属性が含まれる
こともある
4
6. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
RPからOPへのIDトークンの要求
RPは認可リクエストに際し、IDトークンに含めてほしいクレームや、IDトー
クン生成にあたりどのような認証イベントを求めるかを指定
OPはその指定を考慮した上でIDトークンを返却
指定可能な内容の例
クレームのセット
認証および同意確認の際のUI
認証や同意の再実行の要否
エンドユーザを明示的に認証してからの経過時間
UIやクレームのロケール
OPがエンドユーザを
認証する際のヒント
認証コンテクスト・
クラス・リファレンスの値
5
7. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
プロトコル・フロー (1): 認可コードフロー
IDトークンをRP/OP間で直接授受
フロー概要
RPからOPへエンドユーザを経由して
認可リクエストを送信
OPが「認可コード」と呼ばれる値を
エンドユーザ経由でRPに返却
RPがその認可コードをOPに送信して
IDトークン(ならびにアクセストーク
ン)取得
特徴
IDトークンのやりとり(トークン・
リクエスト/レスポンス)がRPとOPとの
直接通信によって行われれる
▪ OPによるIDトークンへの署名は基本的には
不要となり、RP側での署名検証処理も発生
しない
6
8. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
プロトコル・フロー (2): Implicitフロー
OPがIDトークンをエンドユーザ経由でRPに返却
フロー概要
エンドユーザ経由でOPがIDトークン
(ならびにアクセストークン)をRPに
返却
特徴
IDトークンの授受に関し、RPからOP
への通信が発生しない
▪ RPからOPへの直接通信が行えない環境
にも適用することが可能
▪ OPによるIDトークンへの署名、および
RP側での署名検証処理は必須
OPはIDトークンをURLフラグメントに
エンコードしてRPに返却
▪ RPはWebブラウザになんらかのスクリプ
トをダウンロードさせて、そのスクリプ
トによってフラグメントからIDトークン
を抽出し、Webサーバー・アプリケー
ションに送信させることとなる
7
9. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ユーザー属性のリクエスト
認可リクエストのscopeパラメーターを用いて「クレームの
セット」を指定する方法が一般的
OpenID Connectではクレームのセットとして以下を定義
profile(既定のプロファイル)、email(メールアドレス)、
address(住所)phone(電話番号)
OPが独自に定義した「ユーザ属性のセット」をRPが指定する
ことも可能
8
scope=openid profile email http://example.com/employeeAttrs
仕様にて定義
OPが独自に定義
10. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
ユーザー属性の提供
OpenID Connect仕様では二通りの方法を定義
RPに返却するIDトークンに含める(前述)
RPがアクセス可能なUserInfoエンドポイントを用意する
UserInfoエンドポイント
OPがRPにユーザー情報を提供するためのAPI
OAuth 2.0仕様の「保護されたリソース(Protected
Resource)」
▪RPは、認可リクエストの際にIDトークンと同時にOPから取得
したアクセストークンを用いて、このUserInfoエンドポイント
にアクセスする
UserInfoエンドポイントは、ユーザー情報を、通常は
JSON形式にてRPに返却する
9
RP OP
11. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connectの今後のロードマップ
現在Implementer’s Draftが公開中
今後最終仕様に
OpenID Connectを実装した製品・サービスの例
Yahoo! JAPAN (YConnect)、日本経済新聞社
(日経ID)、東急電鉄、Google、PayPal
(Log In with PayPal)、野村総合研究所(Uni-ID)、
Ping Identity (PingFederate)、Gluu (OX)、Layer 7
10
13. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect仕様はモジュール化されており、
用途に応じて取捨選択が可能
Webクライアント向けのシン
プルな仕様。
Basic Client Profileは
OAuth 2.0認可コードフロー、
Implicit Client Profileは同
Implicitフローをベースに拡
張。
12
14. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID ConnectBasic ClientProfileに基づく認証結果の要求・取得の例 (*)
1. WebブラウザからRPの「ログイン」ボタンを
クリック
13
認可
サーバー クライアント
認可
エンドポイント
OpenID
プロバイダ
OpenID
リライング・
パーティ
(RP)
example.comの
IDでログイン!
<a href="https://server.example.com/authorize?grant
_type=code&scope=openid&client_id=3214244&state=af1
Ef">example.comのIDでログイン!</a>
(*) 本ページ以降の例示は http://www.thread-
safe.com/2012/07/how-simple-is-openid-connect-
basic.html を元に作図
トークン
エンドポイント
15. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID ConnectBasic Client Profileに基づく認証結果の要求・取得の例
2. WebブラウザがOPに認可リクエストを送信
14
認可
サーバー クライアント
OpenID
プロバイダ
(OP)
OpenID
リライング・
パーティ
(RP)
GET /authorize?grant_type=code&scope=openid&client_
id=3214244&state=af1Ef HTTP/1.1
Host: server.example.com
認可
エンドポイント
トークン
エンドポイント
16. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID ConnectBasic Client Profileに基づく認証結果の要求・取得の例
3. OPがユーザーを認証
15
認可
サーバー クライアント
OpenID
プロバイダ
(OP)
OpenID
リライング・
パーティ
(RP)
何らかの方法でユーザーを
認証
例: ID/パスワード、OTP、
クッキー、…
認可
エンドポイント
トークン
エンドポイント
17. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID ConnectBasic Client Profileに基づく認証結果の要求・取得の例
4. OPがWebブラウザをRPにリダイレクト
16
認可
サーバー クライアント
OpenID
プロバイダ
(OP)
OpenID
リライング・
パーティ
(RP)
Location: https://client.example.com/cb?code=8rFowi
dZfjt&state=af1Ef
OPがcodeを
返却
認可
エンドポイント
トークン
エンドポイント
18. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例
4. WebブラウザがRPに、OPから受け取った
認可コードを送信
17
認可
サーバー クライアント
OpenID
プロバイダ
(OP)
OpenID
リライング・
パーティ
(RP)
GET /cb?code=8rFowidZfjt&state=af1Ef HTTP/1.1
Host: client.example.com
Webブラウザ
経由でRPに
codeが渡る
認可
エンドポイント
トークン
エンドポイント
19. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例
5. RPがOPに認可コードを送信しIDトークンを
リクエスト
18
認可
サーバー クライアント
OpenID
プロバイダ
(OP)
OpenID
リライング・
パーティ
(RP)
GET /token?code=8rFowidZfjt HTTP/1.1
Host: server.example.com
Authorization: Basic …
codeを送信
認可
エンドポイント
トークン
エンドポイント
20. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例
6. OPがRPに、認可コードにひもづくIDトークン他
を返却
19
認可
サーバー クライアント
OpenID
プロバイダ
(OP)
OpenID
リライング・
パーティ
(RP)
{
"access_token": "SlAV32hkKG",
"token_type": "Bearer",
"refresh_token": "8xLOxBtZp8",
"expires_in": 3600,
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJpc3MiOiJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsInVz
ZXJfaWQiOiIyNDgyODk3NjEwMDEiLCJhdWQiOiJodHRwOi
8vY2iwiZXhwIjoxxpZW50LmV4YW1wbGUuY29tIMzExMjgxOTcwfSA.
eDesUD0vzDH3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ"
}
アクセス・
トークン (*)
IDトークン
(*) UserInfoやその他のAPIアクセスに
使用。本例では省略
認可
エンドポイント
トークン
エンドポイント
21. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例
7. RPがIDトークンを復号し、OPが返却した
ユーザー識別子を取得
20
{
"iss": "https://server.example.com",
“sub": "248289761001",
"aud": "3214244",
"iat": 1311195570,
"exp": 1311281970
}
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.
eyJpc3MiOiJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsInVz
ZXJfaWQiOiIyNDgyODk3NjEwMDEiLCJhdWQiOiJodHRwOi
8vY2iwiZXhwIjoxxpZW50LmV4YW1wbGUuY29tIMzExMjgxOTcwfSA.
eDesUD0vzDH3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ
<?php
$res = json_decode($response, true);
$id_token = $res['id_token'];
$id_array = mb_split(".", $id_token);
$id_body = base64url_decode($id_array[1]);
?>
RP側での復号処理
(例はPHPによる実装例。
ピリオド “.” で3分割し、2番目の
パートをbase64urlデコード)
認証結果
(JWT Claims
Set)
RPが受け取った
id_tokenの値
認証結果
( base64urlエンコードされた
JWT Claims Set)
subの値 =
OPからRPに
払い出された
ユーザー識別子
22. Copyright 2013 OpenID Foundation Japan - All Rights Reserved.
OpenID ConnectBasic ClientProfileに基づく認証結果の要求・取得の例
8. RPがWebブラウザにコンテンツを返却
21
認可
サーバー クライアント
OpenID
プロバイダ
(OP)
OpenID
リライング・
パーティ
(RP)
OPから払い出されたユーザー識別子: 248289761001 にひもづくユーザー
がすでに存在するか?
Yes → 「ようこそ、太郎さん!」
No → 「既存ユーザーとのひもづけ or 新規登録をお願いします」
認可
エンドポイント
トークン
エンドポイント