狠狠撸
Submit Search
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
?
7 likes
?
3,685 views
Takashi Yahata
Follow
ID&IT Management Conference 2014 発表資料 OpenIDファウンデーション?ジャパン EIWG 技術TF
Read less
Read more
1 of 43
Download now
Downloaded 44 times
More Related Content
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
1.
エンタープライズIT環境での OpenID Connect
/ SCIM の 具体的実装方法 OpenIDファウンデーション?ジャパン Enterprise Identity WG / 技術TF リーダー 八幡孝(株式会社オージス総研)
2.
OIDF-J EIWGって? ?
OpenIDファウンデーション?ジャパン(OIDF-J) ? 国内におけるOpenID関連技術の普及?啓蒙のための活動を行なっています。 ? Enterprise Identity WG (EIWG) ? エンタープライズIT市場でOpenID ConnectやSCIMなどの仕様をベースと した、IDフェデレーションやIDプロビジョニングの普及を推進し、新たなビ ジネスの創造?展開を図ることを目的に活動を行なっています。 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 1
3.
EIWGの昨年度の活動 ? 「OpenID
ConnectとSCIMのエンタープライズ利 用ガイドライン」を作成 ? エンタープライズITでのOIDC/SCIMの有用性 ? 日本のエンタープライズITへの適用 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 2
4.
EIWGの今年度の活動 ? ビジネスモデルタスクフォース
? エンタープライズITとクラウドサービスが連携すること で、Win-Winとなれる連携モデルの検討 ? 技術タスクフォース ? エンタープライズITとクラウドサービスの連携を進める ためのサンプル実装の作成、技術課題の検討 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 3
5.
エンタープライズにおけるID連携の動向 ? オンプレシステム?
SaaS活用? BaaS活用 ? エンタープライズIT とクラウドサービスの連携 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 4
6.
エンタープライズにおけるID連携の動向 ? WebアプリのSSO
? APIアクセスのSSO へ拡大 ? エージェント?リバースプロキシによるSSO ? SAML連携? OpenID Connect ? CSV配布? 独自I/Fを使ったIDプロビジョニング ? SCIM Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 5
7.
OpenID Connect /
SCIMを使った サービス?フェデレーションに向かっている オーソリテイティブ? ソース(人事 システムなど) プロビジョニング? システム アイデンティティ? リポジトリ/ SSO / トークン管理システム SaaS プロバイダ SaaS プロバイダ Web サービス Web サービス ユーザー? エージェント (外部サービス) ユーザー? エージェント (モバイルApp) 企業 ユーザー? エージェント (Webサービス) ユーザー? エージェント (デスクトップApp) Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 6 http://www.slideshare.net/tkudo/saml-and-openid-connect-for-cloud-service-providers ユーザー? エージェント (Webブラウザ) API API API API
8.
エンタープライズITで OIDC/SCIMを実装する とは、どういうことなのか?
9.
想定するストーリー ? WebアプリへのSSOをユースケースとして扱う。
? 認証サーバ(OP) を内部ネットワークに配置できる ようOIDCではImplicit Flowを使う。 ? WebアプリへアカウントをSCIMを使って事前プロ ビジョニングして利用する。 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 8
10.
OIDC/SCIM実装の構成 OP (OIDC)
IDM (SCIM-Cli) Webアプリ (OIDC-RP) (SCIM-Svr) ? Implicit Flowの利用 ? 認証結果の連携 ? ユーザ属性の連携 Firewall ? アカウントの事前プロビ ? 不要アカウントのデプロビ Webアプリ (OIDC-RP) (SCIM-Svr) エンタープライズIT クラウドサービス Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 9
11.
まずは作ってみた ? OpenAM
でOpenID Connect OP を構成する ? Ruby OpenID Connect + Rails でOP/RP を作る ? Java でSCIM Server を作る Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 10
12.
実装例: OpenAMを使ったOPの構成 ?
サービス「OAuth2 Provider」を 追加することでOPを構成 ? サポートするフローのタイプ ? Implicitフロー、認可コードフロー ? サポートするクレーム ? 例. openid, profile, email, …, etc ? IDトークンの有効期間 ? サポートするIDトークンの署名ア ルゴリズム ? 例. HS256, RS256, …, etc ? IDトークンの署名鍵 ? …, etc Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 11
13.
実装例: OpenAMを使ったOPの構成 ?
エージェントの設定で「OAuth 2.0 クライアント」としてRPを登録 ? クライアントシークレット ? クライアントタイプ ? Implicitフロー, 認可コードフロー ? リダイレクトURI ? サポートするスコープ属性 ? 例. openid, profile, email, …, etc ? サポートするレスポンスタイプ ? 例. code, id_token, …, etc ? …, etc Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 12
14.
実装例: Rubyを使ったOPの実装 #
-*- coding: utf-8 -*- class AuthorizationsController < ApplicationController require 'oidc/request' require 'oidc/response' before_action :authenticate_user! def new @req = OIDC::Request.new(params) if @req.valid? render :new return end if (params[:redirect_uri].present? && スクラッチで実装 Application.has_redirect_uri(params[:client_id], params[:redirect_uri])) redirect_to @req.error.with_fragment(params[:redirect_uri]) else render json: @req.error.response end end # 同意画面からPOSTされる先 def create res = OIDC::Response.new(params) res.owner = current_user redirect_to res.build_response end end tiny-oidc-provider ├── app │ ├── controllers │ │ ├── application_controller.rb │ │ ├── applications_controller.rb │ │ ├── authorizations_controller.rb │ │ ├── jwk_controller.rb │ │ └── registrations_controller.rb │ ├── models │ │ ├── application.rb │ │ └── user.rb │ ├── views │ │ └ ... │ └ ... ├── lib │ ├── oidc │ │ ├── config.rb │ │ ├── error_response.rb │ │ ├── request.rb │ │ └── response.rb │ └── oidc.rb └ ... Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 認証状態のチェック リクエストパラメータの検証 同意画面の表示 パラメータエラーの画面表示 ID Token, UserInfoなどのレ スポンスを生成 ID Tokenなどをフラグメント につけて、redirect_uriへリ ダイレクト 13 次のページで
15.
実装例: Rubyを使ったOPの実装 #
-*- coding: utf-8 -*- Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. ... module OIDC class Response ... def initialize(opts) @client_id = opts[:client_id] @redirect_uri = opts[:redirect_uri] @token_type = 'Bearer' @state = opts[:state] @nonce = opts[:nonce] @scope = opts[:scope] end # Authorization Request に対するResponse を生成します # # @return [String] ハッシュフラグメントで構成されたパラメータを含むURI def build_response uri = URI.parse(@redirect_uri) uri.fragment=(build_params) uri.to_s end private def build_params [:token_type, :id_token,:state].inject('') {|str, key| str << "#{key}=#{self.send(key)}&" }.chop! end 14 # ID Token(JWT) を生成します def id_token header = UrlSafeBase64.encode64({ :typ => 'JWT', :alg => 'RS256', }.to_json) payload = UrlSafeBase64.encode64(token_data.to_json) input = header + '.' + payload signature = UrlSafeBase64.encode64(pkey.sign('sha256', input)) input + '.' + signature end def pkey OpenSSL::PKey::RSA.new(File.read(OIDC::Config.rsa_private_key)) end # ID Token のクレームを定義 def token_data issue_at = Time.now.to_i exp = issue_at + id_token_expire return { :iss => issuer, :sub => owner.sub, :aud => @client_id, :exp => exp, :iat => issue_at, :nonce => @nonce, :userinfo => userinfo } end # ownerの情報に対してscopeで指定された情報のみ返却 def userinfo owner.as_json scopes end end end スクラッチで実装 JWTヘッダー ID Tokenに含めるクレー ムセットを生成 JWSで署名をつける
16.
実装例: Rubyを使ったRPの実装 Ruby
OpenID Connect を使って # -*- coding: utf-8 -*- class AuthorizationController < ApplicationController def authorize redirect_to authz.authorization_uri(new_state, new_nonce) end def callback # @see http://openid-foundation-japan.github.io/openid-connect-core-1_0.ja.html#FragmentNotes end def validate if params['error'] logger.error "error=#{params['error']}, description=#{params['error_description']}" render :nothing => true, :status => 400 return end unless authz.validate(params, stored_state, stored_nonce) == true render :nothing => true, :status => 400 return end session[:id_token] = (authz.oidc.id_token).as_json session[:user_info] = (authz.oidc.user_info).as_json end ... end Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 15 oidc-implicit-flow-rp ├── app │ ├── controllers │ │ ├── application_controller.rb │ │ ├── authorization_controller.rb │ │ └── top_controller.rb │ ├── models │ │ ├── active_model_base.rb │ │ ├── authorization.rb │ │ ├── concerns │ │ └── oidc.rb │ └── views │ └ ... └ ... OPの認証エンドポイントへリ ダイレクトする コールバック先エンドポイント フラグメントをPOSTする JavaScriptを返す フラグメントのPOST先エン ドポイント ID Tokenを検証し、セッショ ンを生成する OPがエラーを返した場合の処理 ID Tokenを検証 アプリケーションのセッショ ンを生成する 次のページで
17.
実装例: Rubyを使ったRPの実装 #
-*- coding: utf-8 -*- require 'base64' class Authorization < ActiveModelBase Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. ... def authorization_uri(state, nonce) client.redirect_uri ||= redirect_uri client.authorization_uri( response_type: [:id_token].collect(&:to_s), state: state, nonce: nonce, scope: [:openid, :email, :profile].collect(&:to_s) ) end def validate(fragment, state, nonce) #stateパラメータのチェック unless fragment['state'] == state then Rails.logger.error 'invalid state parameter.' return false end # ID Tokenの検証 begin id_token = decode_id_token fragment['id_token'] id_token.verify!( issuer: issuer, client_id: identifier, nonce: nonce ) oidc.id_token = id_token oidc.user_info = id_token.raw_attributes['userinfo'] rescue => e Rails.logger.error "#{e.message}" return false end return true end Ruby OpenID Connect を使って 16 def oidc @oidc||= OIDC.new end private def client @client ||= OpenIDConnect::Client.new member_to_json end def member_to_json [:issuer, :identifier, :jwks_uri, :authorization_endpoint, :token_endpoint, :userinfo_endpoint ].inject({}) do |hash, key| hash.merge!( key => self.send(key) ) end end def decode_id_token(id_token) OpenIDConnect::ResponseObject::IdToken.decode id_token, public_keys.first end def jwks @jwks ||= JSON.parse(OpenIDConnect.http_client.get_content(jwks_uri)).with_indifferent_access JSON::JWK::Set.new @jwks end #OpenIDConnect::Discovery::Provider::Config::Response def public_keys @public_keys ||= jwks.collect do |jwk| JSON::JWK.decode jwk end end end state値の検証も忘れずに ID Tokenの検証 Ruby OpenID Connect を使ってID Tokenのデ コードと検証 署名の検証に必要な鍵は OPのjwks_uriから入手す る Ruby OpenID Connect を使ってOPの認証エンド ポイントへのURLを生成
18.
実装例: Javaを使ったSCIMサーバの実装 ?
SCIMのスキーマ毎と Bulk操作に対して、エ ンドポイントを定義 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 17
19.
実装例: Javaを使ったSCIMサーバの実装 protected
void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 認証処理 Operation op = new Operation(); boolean result = op.auth( context, request ); if ( !result ) { // 認証エラー errorResponse( response, op.getErrorCode(), op.getErrorMessage() ); } else { // 検索パラメータ取得 String targetId = request.getPathInfo(); String attributes = request.getParameter( "attributes" ); String filter = request.getParameter( "filter" ); String sortBy = request.getParameter( "sortBy" ); String sortOrder = request.getParameter( "sortOrder" ); String startIndex = request.getParameter( "startIndex" ); String count = request.getParameter( "count" ); // 検索 JsonObject searchResult = op.search(context, request, targetId, attributes, filter, sortBy, sortOrder, startIndex, count ); Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 18 } ? 各エンドポイントに認証処理 を実装。Basic認証、OAuth2 を使った認証など。 ? SCIMの仕様ではOAuth2が推 奨されている。 ? パラメータ取得。 ? GETの場合はQUERYパラメー タから取得。 ? POST, PUT, PATCH操作の場 合は、リクエストボディで送 られてくるJSONの取得と解 析が必要。 ? 実際のオブジェクトへの操作 を実装。 ? バックエンドにDBやLDAPを 使う設計としてそれらへの操 作を実装する。
20.
OIDC: 実装簡単。考慮点多い。 ?
ライブラリもあるし、製品でも対応。実装は簡単。 ? OP/RPの連携で認証機能を実現。考慮点は多い。 ? エンタープライズIT(OP) とクラウドサービス(RP) ? OPができること、RPができること ? OPで対応すべきこと、RPで対応すべきこと ? 相互接続性を保つための取り決め Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 19
21.
SCIM: 実装はやや難。SCIM 2.0対応を視野に。
? 使えるライブラリ、フレームワークが不足。 ? JSON処理以外はほぼスクラッチ ? SCIM 2.0仕様は、2014年末にリリース予定 ? 現在draft の更新が活発 ? SCIM 1.1 -> SCIM 2.0 の変更は多い。 ? 実装はSCIM 2.0 への対応をにらんで。 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 20
22.
認証基盤を作るときによく検討されること 検討事項 認証された
ユーザに 関する情報 の連携方法 ID/コード系 表示情報系 セッション 管理 アイドル タイムアウト セッション タイムアウト 特定機能利用時の再認証処理 特定機能利用時の強い認証の 要求 従来型の認証基盤 (一元管理) HTTPヘッダで連携する ? 連携されたIDでLDAP問合せ ? 事前にプロビしておく ? HTTPヘッダで連携する 認証基盤でタイムアウト処理 認証基盤でタイムアウト処理 認証基盤がURLで機能判定し、 認証画面を表示 認証基盤がURLで機能判定し、 追加の認証画面を表示 フェデレーション型の認証基盤 (分散協調型の管理) トークンで連携 ? トークンで連携 ? ユーザー情報APIから取得 ? 事前にプロビしておく RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側からOPへ再認証を要求する 方法の取り決めが必要。 RP側からOPへ強度の強い認証を 要求する方法の取り決めが必要。 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 21
23.
信頼できるクラウドサービスがエンプラITとつながる ? エンプラ側の視点で
言えば、多くのこと がRPの実装に依存 した状態。 ? 信頼できるRP (正しく実装された クラウドサービス) をエンプラITは求 めるようになる。 検討事項 認証された ユーザに 関する情報 の連携方法 ID/コード系 表示情報系 セッション 管理 アイドル タイムアウト セッション タイムアウト 特定機能利用時の再認証処理 特定機能利用時の強い認証の 要求 フェデレーション型の認証基盤 (分散協調型の管理) トークンで連携 ? トークンで連携 ? ユーザー情報APIから取得 ? 事前にプロビしておく RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側からOPへ再認証を要求する 方法の取り決めが必要。 RP側からOPへ強度の強い認証を 要求する方法の取り決めが必要。 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 22
24.
考慮点についての 技術TFでの検討内容
25.
技術TFでの検討状況 検討事項 認証された
ユーザに 関する情報 の連携方法 ID/コード系 表示情報系 セッション 管理 アイドル タイムアウト セッション タイムアウト 特定機能利用時の再認証処理 特定機能利用時の強い認証の 要求 フェデレーション型の認証基盤 (分散協調型の管理) トークンで連携 ? トークンで連携 ? ユーザー情報APIから取得 ? 事前にプロビしておく RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側からOPへ再認証を要求する 方法の取り決めが必要。 RP側からOPへ強度の強い認証を 要求する方法の取り決めが必要。 利用する属性の共通化 を検討中 セッション管理方式の 共通化を検討中 今後検討予定 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 24
26.
利用属性の共通化の検討 検討事項 認証された
ユーザに 関する情報 の連携方法 ID/コード系 表示情報系 セッション 管理 アイドル タイムアウト セッション タイムアウト 特定機能利用時の再認証処理 特定機能利用時の強い認証の 要求 フェデレーション型の認証基盤 (分散協調型の管理) トークンで連携 ? トークンで連携 ? ユーザー情報APIから取得 ? 事前にプロビしておく RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側からOPへ再認証を要求する 方法の取り決めが必要。 RP側からOPへ強度の強い認証を 要求する方法の取り決めが必要。 利用する属性の共通化 を検討中 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 25
27.
利用属性の共通化の方針 ? OIDC/SCIMの両方で同じ属性を扱う
? 対応すべき属性を3つのレベルに分類 利用する属性の共通化 ? RP(クラウドサービス)を動かすための最小限の属性 ? エンタープライズITで通常扱う属性 ? エンタープライズITで必要となりうる属性 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 26
28.
利用する属性を3つのレベルに整理 レベル1属性(RPを動かすための最小限の属性) 属性SCIM
Schema (*1) OIDC Claims ユーザーID externalId, userName sub メールアドレ ス emails email – email_verified 名前name.formatted name name.givenName given_name name.familyName family_name name.middleName middle_name 更新日lastModified updated_at 状態Active – パスワード使用しない– 利用する属性の共通化 レベル2属性(エンタープライズITで通常扱う属性) 属性SCIM Schema (*1) OIDC Claims 従業員番号employeeNumber Claimの拡張が必要 組織コードorgUnitCode(*2) Claimの拡張が必要 組織名orgUnitLocalNameValue (*2) Claimの拡張が必要 役職コードtitleCode(*2) Claimの拡張が必要 役職名titleLocalNameValue(*2) Claimの拡張が必要 電話番号phoneNumbers phone_number … レベル3属性(エンタープライズITで必要となりうる属性) 属性SCIM Schema (*1) OIDC Claims 言語locale locale 表示順displayOrder Claimの拡張が必要 … *1: SCIM2.0 draft-06の項目名で整理 *2: 「OpenID Connect とSCIM のエンタープライズ利用ガイドライン」 で定義したOrganizationalUnitリソース、Titleリソースの属性 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 27
29.
OIDCでの連携方法~ scope 利用する属性の共通化
? レベル1属性はscope=email profile で要求できる。 ? レベル2、レベル3属性を要求するために拡張scope を定義する。 ? それぞれにscope名を定義 ? 名称は検討中 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 28
30.
利用する属性の共通化 OIDCでの連携方法~ IDトークンへの埋め込み
? IDトークンに userinfo claim を追加して応答 { "iss": "http://server.example.com", "sub": "248289761001", "aud": "s6BhdRkqt3", "nonce": "n-0S6_WzA2Mj", "exp": 1311281970, "iat": 1311280970, "userinfo": { "name": "日本太郎", "given_name": "太郎", "family_name": "日本", "email": "nippontaro@example.com", "orgUnitCode": ["0111", "0211"], "orgUnitLocalNameValue": ["営業部", "企画部"], "titleCode": "002", "titleLocalNameValue": "部長", "locale": "ja_JP" } } Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 29
31.
利用する属性の共通化 OIDCで使う時に連携か?SCIMで事前プロビか? ?
アプリケーションの特性で使い分ける ? 属性の特性で使い分ける ? サービス側の使い方で決まることではあるが、クラ ウドサービス横断で利用することを前提に共通化を 検討 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 30
32.
セッション管理方式の共通化の検討 検討事項 認証された
ユーザに 関する情報 の連携方法 ID/コード系 表示情報系 セッション 管理 アイドル タイムアウト セッション タイムアウト 特定機能利用時の再認証処理 特定機能利用時の強い認証の 要求 フェデレーション型の認証基盤 (分散協調型の管理) トークンで連携 ? トークンで連携 ? ユーザー情報APIから取得 ? 事前にプロビしておく RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側で実装が必要。セッション 状態の受け渡し方法が課題。 RP側からOPへ再認証を要求する 方法の取り決めが必要。 RP側からOPへ強度の強い認証を 要求する方法の取り決めが必要。 セッション管理方式の 共通化を検討中 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 31
33.
セッション管理方式の検討の必要性 従来型のSSO フェデレーション型SSO
? ゲートウェイのように構成され た従来のSSO ? 統制(アプリへのアクセス制 御)観点のセッション管理は SSOだけで実装 セッション管理方式の共通化 ? フェデレーション型では、セッ ション管理はRPの実装に依存 ? 統制観点のセッション管理のた めに、OP-RP間の方式の取り決 めが必要 ユーザーSSO アプリユーザー OP(SSO) RP(アプリ) Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 32
34.
セッション管理方式の検討ポイント セッション管理方式の共通化 ?
RPがOPにセッションの状態を確認する方法 ? タイムアウト後はアプリ(RP) が利用できないよう にするためのOPの振る舞い ? 無効化されたアカウントのセッション停止 ? ユーザーの利用への影響、開発者の対応のしやすさ Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 33
35.
セッション管理方式の選択肢 セッション管理方式の共通化 ?
OpenID Connect Session Management ? IDトークンの有効期限毎にセッションを更新 ? プロンプト無しで認証フローの再実行 ? リフレッシュトークンを使った認証情報の更新 ? デプロビジョニングによるコントロール Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 34
36.
セッション管理方式の共通化 OpenID Connect
Session Management ? OpenID Connect Session Management 1.0 - draft 21 ? http://openid.net/specs/openid-connect- session-1_0.html ? セッション確認のリアルタイム性は高い ? OPへの負荷との調整しだいだが、分単位 で状態の反映が可能 ? 対応のためには全アプリ画面へのiframe 埋め込みが必要。改修コストは高め。 ブラウザ OP iframe client_id + session_state セッション状態の 問合せ(非同期) changed / unchanged RP iframe OP Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 35
37.
プロンプト無しで認証フローの再実行 Copyright ?
2014 OpenID Foundation Japan. All Rights Reserved. ブラウザ 36 ? IDトークンの有効期限毎にIDトークンを 取り直すことでセッションを更新する ? セッション確認の精度は数時間オーダー ? IDトークンの有効期限が1時間なら、確認精度は1時間 ? 対応のためにはアプリのセッション管理 部分の改修が必要。コールバックを扱う 処理が必要。対応コストは中くらい。 ? IDトークン再取得をするときにPOST データが失われる制限あり。 セッション管理方式の共通化 Session Manager OP アプリ IDトークンの 有効期限をチェック 新しいIDトークンと ともに元のURLへ復帰 prompt=none で認証フローを再実行
38.
リフレッシュトークンを使った認証情報の更新 Copyright ?
2014 OpenID Foundation Japan. All Rights Reserved. ブラウザ 37 ? IDトークンの有効期限毎にIDトークンを 取り直すことでセッションを更新する ? セッション確認の精度は数時間オーダー ? IDトークンの有効期限が1時間なら、確認精度は1時間 ? 対応のためにはアプリのセッション管理 部分の改修が必要。対応コストは低め。 ? OPがAuthorization Code Flowに対応す る必要あり。DMZへの配置が必須。 ? POSTデータが失われることはない。 ? Offline Clientを使う場合のRefresh Token の用法との整合について要検証。 セッション管理方式の共通化 Session Manager OP アプリ IDトークンの 有効期限をチェック リフレッシュトークンを使って 新しいIDトークンを取得
39.
セッション管理方式の共通化 デプロビジョニングによるコントロール ?
セッションタイムアウトには対応できな いが、無効化されたアカウントの利用は 確実に停止する。 ? ID管理によるデプロビジョニングを実行 することで実現。ID管理が実現されてい れば対応コストは不要。 アプリ ユーザー テーブル 無効化されたユーザーの 継続利用はできなくなる ブラウザ 無効化されたユーザーの デプロビジョニング処理 IDM OP Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 38
40.
セッション管理方式の共通化 セッション管理方式の共通化の方向性 方式確認の精度アプリ開発者視点アプリ利用者視点
OpenID Connect Session Management ○ 分オーダーでの精度で確認 可能 × 全画面へiframe埋め込みが必要 △ UXは現状のアプリのまま維持 できる。ブラウザの対応につ いては検証が必要 プロンプト無しで 認証フローの再実行 △ 時間オーダーの精度で確認 可能 △ セッション管理部の改修。コー ルバックを扱う処理が必要 × セッション更新時にPOSTデー タが失われる可能性がある リフレッシュトークンを 使った認証情報の更新 (OPがCodeフローに対応し、DMZ に配置される必要あり) △ 時間オーダーの精度で確認 可能 ○ セッション管理部の改修。 ○ UXは現状のアプリのまま維持 できる デプロビジョニングによる コントロール × 無効化されたアカウントの 停止にとどまる ― (改修なし) ○ UXは現状のアプリのまま維持 できる 目指すところはOIDC Session Management。アプリ対応コストが高いため、過渡的な選択肢は必要。 いずれの方式も課題はあり、技術TF内で継続検討する。 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 39
41.
今后の活动
42.
今后の活动 ? サンプル実装の継続
? コードサンプル、製品設定サンプル ? 考慮点の検証、相互接続性の検証 ? エンタープライズ向けOpenID Connect / SCIM 実装ガイドラインとして文書化 ? 年内の公開を目指して活動中 Copyright ? 2014 OpenID Foundation Japan. All Rights Reserved. 41
Download