Open棟梁Project - マイクロソフト系技術情報 Wiki -[[戻る>クレームベース認証#ya3d2a7b]] * 目次 [#tc83c978] #contents *概要 [#bb0360e2] -OpenID 2.0のプロトコルを引き継ぐことをせず、~ OAuth 2.0を拡張して、OpenID 2.0を置き換えたもの。 -NIST SP 800-63-1で定義されている全ユーザ認証要件(LoA)への対応が可能。~ 金融システムや電子政府/行政システムにも利用できることを意味している。 **設計思想 [#s2c1f4d6] -簡単なことは簡単に -難しいことも可能に -モジュラーデザイン *モジュラーデザイン [#he3af831] ユースケースに対応するため、 -複数の仕様から成り立っており、 -それらをモジュール的に組み合わせることで 多様な環境をサポートできる。 **仕様一覧 [#ie0f4645] ***[[OAuth]] 2.0に認証結果とプロフィールの受渡し機能を追加 [#c4eeb3ab] [[OAuth]] 2.0に認証結果とプロフィールの受渡し機能のみを追加した仕様 -Basic Client Profile~ http://openid.net/specs/openid-connect-basic-1_0.html >OAuth 2.0 Authorization Code Grantを拡張 -Implicit Client Profile~ http://openid.net/specs/openid-connect-implicit-1_0.html >OAuth 2.0 Implicit Grantを拡張 ***OpenID Connectのコアな機能(難しいことも可能に) [#wf00d0d3] リクエスト内の細かいクレーム指定や認証コンテキストの指定 -Messages~ http://openid.net/specs/openid-connect-messages-1_0.html >OAuth 2.0に追加で必要となるメッセージの使用 -Standard~ http://openid.net/specs/openid-connect-standard-1_0.html >Messagesの内容をHTTPに落とし込んだHTTPバインディング仕様 ***関連仕様 [#h5793a09] -Discovery~ http://openid.net/specs/openid-connect-discovery-1_0.html >メールアドレスやURLからユーザが利用しているOPを特定する方法 -Dynamic Client Registration~ http://openid.net/specs/openid-connect-registration-1_0.html >動的なRP登録を行う方法 -Session Management~ http://openid.net/specs/openid-connect-session-1_0.html >OP上でユーザーがログアウトしたときにRP側から検知する方法など、セッション管理の方法 *OpenIDトークン(クレーム) [#ofb73c59] -以下の値を含むデータをエンコードして署名を付けたもの。 --発行元のOP識別子 --発行先のRP識別子(client_id) --ユーザー識別子 --発行日時 -仕様全体を通してメッセージ形式にJSONを採用。 -クレームの扱いについて次のような機能を定義している。 --外部クレームの提供 ---集約クレーム(Aggregated Claims) ---分散クレーム(Distributed Claims) --クレームの暗号化(Encrypted Claims) **外部クレーム [#jb63c82f] OPは、扱うクレームの内容によって、 -集約クレーム -分散クレーム どちらを利用すべきかを判断する必要がある。 ***集約クレーム [#yfd0840d] -別のOPが持つクレームを署名付きで提供すること。 -RPからリクエストを受けたOPは、事前に取得していた、~ もしくは動的に取得した別のOPのクレームをレスポンスに含む。 一定期間変更されないことが保証されており~ キャッシュの効果があるものは集約クレーム。 ***分散クレーム [#xaa4e17c] クレームそのものではなく、問い合わせ先のURLを扱う。 -Publicなクレームの場合 --エンドポイントのURL -ユーザー認可が必要な場合 --エンドポイントのURL --OAuth 2.0のアクセストークン をレスポンスに含む。 頻繁に更新されるものは分散クレーム。 **クレーム暗号化 [#vfd3c786] クレーム(JSONデータ)の -署名作成(JWS) -暗号化(JWE) の方法は、IETFのJOSE WGにて仕様が策定されている。 -Javascript Object Signing and Encryption (jose)~ http://datatracker.ietf.org/wg/jose/ *** [#c066b69f] ***JSON Web Encryption(JWE) [#y564ec58] JSONデータで表現されたクレームを、 -OP:クレームを暗号化する。 -OP:RPにリダイレクトして渡す。 -RP:クレームを復号化する。 *OpenID Connectのシーケンス [#s55b276e] **Webアプリ [#h438d001] -OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜~ OpenID Connect Authorization Code Flow~ http://www.slideshare.net/kura_lab/openid-connect-id/28 -OpenID Connect体験 - Qiita~ http://qiita.com/sonedazaurus/items/753a65186f1be7185b39 ***STEP1 Authorization codeの取得 [#w6d2830e] ID連携したいアプリケーションがIdpからAuthorization codeを取得。 -リクエスト https://xxxxxxx? ---> IdpのURL response_type=code+id_token &client_id={client_id} &redirect_uri=http://example.com &state=CSRF対策のランダム文字列 &scope=openid+profile &nonce=リプレイアタック対策のランダム文字列 -パラメタ |パラメータ|必須|説明|h |response_type|○|「code」と「id_token」を指定| |client_id|○|事前に準備したclient_idの値を指定| |redirect_uri|○|アプリケーションID登録時のコールバックURLに入力したURLを指定| |state||CSRF対策のランダム文字列を指定| |scope|○|・openid:ユーザー識別子を取得(必須)&br;・profile:姓名・生年・性別が取得&br;・email:メールアドレスと確認済みフラグを取得&br;・address:ユーザー登録住所情報が取得| |nonce|id_tokenを取得する際は必須|リプレイアタック対策のランダム文字列を指定| |display||ユーザのUIを選択:&br;・page(PC用UI、デフォルト値)&br;・touch(スマートフォン用UI)&br;・wap(フィーチャーフォン用UI)&br;・inapp(ネイティブアプリ用UI)~| |その他、Idp独自パラメタ||-| -成功するとログイン/同意画面が表示される。~ 一度同意すると、次回以降同意画面は省略される。 -ログイン/同意が完了する(もしくは事前にログイン、同意している)と、~ 以下のようなURLで「http://example.com」にリダイレクトされる。 http://example.com/?code=xxxxxxxx&state=CSRF対策のランダム文字列 ***STEP2 Access Token、ID Tokenの取得 [#ma165906] **モバイルアプリ [#v2c717b3] -デジタル・アイデンティティ技術最新動向(4):~ 「OpenID Connect」を理解する (2/2) - @IT~ http://www.atmarkit.co.jp/ait/articles/1209/27/news138_2.html ***Step 0:Discovery & Dynamic Client Registration [#l8e54863] OP探索と動的なRP登録 「○○のIDでログイン」というリンクを選択する替わりに、~ 次の2種類の値をOP特定(Discovery)のためのヒントとして利用できる。 -メールアドレス~ 例 : ritou@openidconnect.info -OP URL~ 例 : https://openidconnect.info *次期AD FS [#hcd0bd22] -IdM実験室: [AD FS]OpenID Connectに対応した次期AD FSを試す~ http://idmlab.eidentity.jp/2015/08/ad-fsopenid-connectad-fs.html