Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenID Connect, December 2011

OpenID Connect, December 2011

Prepared for the 8th Information Security Technology Trend Research Task Group Meeting, December 22, 2011

http://www.ipa.go.jp/security/outline/committee/isec_tech1.html

Avatar for Tatsuo Kudo

Tatsuo Kudo

December 22, 2011
Tweet

More Decks by Tatsuo Kudo

Other Decks in Technology

Transcript

  1. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    更新履歴 Dec/22/2011 初版 Jan/17/2012 SlideShareにて公開 OpenID Connect Protocol Suiteを修正 ▪ 「公式マップ」(左の図)をJan/12/2012の版に差し替え ▪ 私的解釈(右の図) を修正 (Thanks to 崎村さん) 1
  2. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    アジェンダ 2011年7月から12月にかけての技術動向を概観 OpenID Connect ▪ https://openid.net/connect/ 2
  3. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connectとは http://openid.net/connect OpenIDの次期バージョン OAuth 2.0 仕様をベースに拡張 「シンプルな認証結果と属性情報の取得」 (後述) の範囲であれば、 一般的なOAuth 2.0認可 + API アクセスのフローとほぼ同様 メッセージ形式にJSONを採用 加えてJWT (JSON Web Token) を活用することにより、署 名と暗号化をサポート 仕様のモジュラー化 かんたんなことをシンプルにする一方、複雑なことも実現可能に 3
  4. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID 2.0 4 OpenIDプロバイダ(OP) RPのリクエストに基づきユーザー認証を行い その認証結果と属性情報を提供 OpenIDリライング・パーティ(RP) OPに認証結果や属性情報をリクエストし その情報をもとにユーザーにサービスを提供 ユーザー RPへのアクセスを試みる過程においてOPから RPへの認証結果と属性情報の提供を許可 PCのWebブラウザ 1. 「OPの IDで ログイン」 2. OPの場所を特定し、リクエスト/ レスポンスに用いる署名鍵を交換 4. ユーザー認証の実施と 認証結果と属性情報の 提供可否の確認 6. アクセスを 許可し サービスを 提供 3. 認証リクエスト (ブラウザを リダイレクト) 5. 認証レスポンス (ブラウザを リダイレクト)
  5. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenIDプロバイダ(OP) RPのリクエストに基づきユーザー認証を行い その認証結果と属性情報を提供 Web API (ID情報、lセッション管理、 ソーシャル、決済、 アクティビティ、…) OpenID 2.0の課題 (≒ OpenID Connectの注力分野) 5 OpenIDリライング・パーティ(RP) OPに認証結果や属性情報をリクエストし その情報をもとにユーザーにサービスを提供 ユーザー RPへのアクセスを試みる過程においてOPから RPへの認証結果と属性情報の提供を許可 PCのWebブラウザ 1. 「OPの IDで ログイン」 2. OPの場所を特定し、リクエスト/ レスポンスに用いる署名鍵を交換 3. 認証リクエスト (ブラウザを リダイレクト) 4. ユーザー認証の実施と 認証結果と属性情報の 提供可否の確認 5. 認証レスポンス (ブラウザを リダイレクト) 6. アクセスを 許可し サービスを 提供 「携帯電話のWebブラウザや、 Webブラウザ以外の ユーザー・エージェント (ネイティブ・アプリケーションや JavaScriptクライアントなど) にも対応したい」 「認証リクエスト/ レスポンスに対して、 公開鍵を用いて 暗号化・署名したい」 「OP/RP間の設定をもっとかんたんに、 もしくは省略したい」 「OPの提供する 他のAPIと かんたんに 組み合わせたい」
  6. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connectのフロー(概要) 6 認可 サーバー ユーザー 情報 (クレーム) 3. ユーザー 認証・認可 クライアント 7. ユーザー属性 提供要求 クレーム プロバイダ クレーム ソース UserInfo エンドポイント エンドユーザー 認可 エンドポイント 1. サービスに アクセス OpenID プロバイダ チェックID エンドポイント 3 1 6 2 4 5 6(オプション). 検証結果返却 2. トークン 取得要求 4. アクセス・ トークンとID トークンを返却 5(オプション): IDトークン検証 要求 7 8 8. ユーザー 属性提供 9.(オプション): ユーザー属性 提供要求 9 10 10 (オプショ ン): ユーザー 属性提供 11. サービス 提供 11
  7. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    Underpinnings OpenID Connect Protocol Suite 「公式マップ」 http://openid.net/connect …が、以下のほうが実態に近 い気がする 7 Bindings •OpenID Connect Standard •Other Vendor Proprietary / Community Specific Bindings Endpoints and associated message formats •OpenID Connect Messages Optional Functionality •OpenID Connect Discovery •OpenID Connect Dynamic Client Registration •OpenID Connect Session Management •Other Vendor Proprietary / Community Specific Functionality Profiles •OpenID Connect Basic Client •Other Vendor Proprietary / Community Specific Profiles
  8. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connect のユースケース 1. シンプルな認証結果と属性情報の取得 OpenID Connectフローの処理の結果、クライアントは認可サーバーから id_tokenとアクセス・トークンを得る 認証結果: id_tokenを検証し取得 id_token ▪ JWT(JSON Web Token)形式 ▪ JWS (JSON Web Signature)により署名 ▪ user_id、auth_timeなどが含まれている 検証方法 ▪ 取得したクライアント自身がid_tokenを検証 ▪ 外部の「Check IDエンドポイント」にid_tokenを送付し、検証を依頼 属性情報: アクセス・トークンを用いて取得 クライアントはフロー開始時(認可リクエスト)のscopeに、取得したい「クレーム」を指定 ▪ 指定可能なクレームはprofile (一般的なユーザー属性(address, emailを除く)), address (住所), email (メールアドレス) の3種類(複数同時に指定可能) 取得したアクセス・トークンを用いてUserInfoエンドポイントにアクセスし、属性を取得 ▪ JSON形式 8
  9. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connect のユースケース 2. 仕様に規定されている以外の属性の取得 認可リクエストのscopeに独自 の「クレーム」を指定 さらに認可リクエストに「リクエ スト・オブジェクト」を付加し、要 求する属性を指定 リクエスト・オブジェクト 認可サーバーへのリクエスト・パ ラメータをJWT化したもの 認可リクエストへの付加方法 ▪ requestパラメータの値としてリクエ スト・オブジェクトを指定 ▪ request_uriパラメータの値として、 リクエスト・オブジェクトの場所を指 定 例: もし「edupersonクレーム」 を作る場合 scopeにedupersonを指定 リクエスト・オブジェクトとして以下 の内容を指定 UserInfoにアクセスすることによ り、以下の属性を取得 9 { "user_id": null, "urn:mace:dir:attribute-def:cn" : {"optional": true}, "urn:mace:dir:attribute-def:sn" : {"optional": true}, "urn:mace:dir:attribute-def:givenName" : {"optional": true}, "urn:mace:dir:attribute-def:mail" : null } { "user_id": "248289761001", "urn:mace:dir:attribute-def:cn" : "John Bradley", "urn:mace:dir:attribute-def:sn" : "Bradley", "urn:mace:dir:attribute-def:givenName" : "John", "urn:mace:dir:attribute-def:mail" "[email protected]" }
  10. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connect のユースケース 3. ユーザー認証の保証レベルの指定 認可リクエストに付加する 「リクエスト・オブジェクト」に、 要求する保証レベルを指定  ユーザー認証後得られた id_tokenに、保証レベルが 含まれる 例 リクエスト・オブジェクトとして 以下の内容を指定 ユーザー認証後取得した id_tokenに以下の内容が含ま れる 10 "id_token": { "claims": { "auth_time": null, “acr": { "values":["2"] } }, "max_age": 86400, } “acr": {"values":["3","2"]}
  11. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connect のユースケース 4. UserInfoエンドポイントの外部にあるクレームの取得 UserInfoから提供する外部のクレームとして、「集約 (aggregated)クレーム」と「分散(distributed)クレーム」を規 定 集約(aggregated)クレーム UserInfoエンドポイントから提供されるクレームの中に、外部クレー ムの「実体」が含まれる ▪ その「実体」はJWT形式に変換して含まれることにより、他のクレームと区別さ れる 分散(distributed)クレーム UserInfoエンドポイントから提供されるクレームの中に、外部クレー ムを取得するための情報が含まれる ▪ 場合によっては、取得するための情報としてアクセス・トークンが指定されてい る 11
  12. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connect のユースケース 5. クライアントによるOpenIDプロバイダのディスカバリ OpenID Connect Discovery エンドユーザーが指定した識別子をもとに、OpenIDリライング・パー ティがOpenIDプロバイダを発見する仕組みを定義 ▪ OpenID 2.0にて実現されていた機能と同様 識別子は以下のどちらかであるべきである (SHOULD) ▪ メールアドレス or URL 識別子を元にOpenIDリライング・パーティは、SWD (Simple Web Discovery) により、OpenIDプロバイダを発見する 12 GET /.well-known/simple-web-discovery?principal=joe%40example.com&service=http%3A%2F%2Fopenid.net%2Fspecs%2Fconnect%2F1.0%2Fissuer HTTP/1.1 Host: example.com HTTP/1.1 200 OK Content-Type: application/json { "locations":["https://server.example.com"] }
  13. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connect のユースケース 6. クライアント情報の動的な登録 OpenID Connect Dynamic Client Registration OpenIDプロバイダとOpenIDリライング・パーティとが、動的に信頼 関係を確立する仕組みを定義 ▪ OpenID 2.0にて実現されていた機能と同様 OpenIDリライング・パーティがOpenIDプロバイダの「クライアント登 録エンドポイント」に、自身を登録するようリクエスト ▪ 成功した場合、レスポンスとしてclient_id/client_secretが返却される 13 POST /connect/register HTTP/1.1 Accept: application/x-www-form-urlencoded Host: server.example.com type=client_associate &redirect_uris=https://client.example.com/callback%20https://client.exam ple.com/callback2 &logo_url=https://client.example.com/logo.png &user_id_type=pairwise &sector_identifier_url=https://othercompany.com/file_of_redirect_uris_for _our_sites.js &token_endpoint_auth_type=client_secret_basic &jwk_url=https://client.example.com/my_rsa_public_key.jwk &userinfo_encrypted_response_algs=RSA1_5%20A128CBC HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store { "client_id":"SlAV32hkKG", "client_secret":"cf136dc3c1fd9153029bb9c6cc9ecead918bad9887fce6c9 3f31185e5885805d", "expires_in":3600 }
  14. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connect のユースケース 7. セッション管理 OpenID Connect Session Management OpenIDプロバイダ(認可サーバー)と、その認可サーバーをユー ザー認証に利用するOpenIDリライング・パーティ(サードパーティ)と の間での、セッションのライフサイクル管理(生成、利用、破棄)の仕 組みを定義 id_tokenを利用 14
  15. Copyright © 2011 Nomura Research Institute, Ltd. All Rights Reserved.

    OpenID Connectの今後のロードマップ 2011/12/24 ~ 2012/02/06: Implementer’s Drafts Review 2012/02/14 (予定): Official Implementer’s Draft その後、最終仕様に 15