はじめに 1

Size: px
Start display at page:

Download "はじめに 1"

Transcription

1 OpenAM&OpenIDMで シングルサインオンをするための 技 術 解 説 株 式 会 社 野 村 総 合 研 究 所 情 報 技 術 本 部 オープンソースソリューション 推 進 室 和 田 広 之 株 式 会 社 野 村 総 合 研 究 所 情 報 技 術 本 部 オープンソースソリューションセンター (OSSC) Mail : ossc@nri.co.jp Web:

2 はじめに 1

3 自 己 紹 介 所 属 部 署 オープンソースソリューション 推 進 室 (OSSC) OSSを 使 ったシステム 構 築 から 運 用 までワンストップでサポート 対 象 OSSは50 種 類 以 上 私 の 担 当 OSSをベースとした 製 品 開 発 を 担 当 OpenStandia/Portal OpenStandia/SSO&IDMなど OpenAM OpenIDMの 機 能 拡 張 バグ 修 正 も 実 施 しています 2

4 OpenAMの 紹 介 3

5 OpenAMの 機 能 紹 介 1. OpenAM 10.0 の 新 機 能 2. OpenAM 10.1 (Xpress)の 新 機 能 3. NRI 拡 張 機 能 について 4

6 1. OpenAM 10.0 の 新 機 能 OpenIG REST APIのJSON 出 力 リスクベース 認 証 OAuth 2.0クライアント 認 証 LDAPパスワードポリシーのサポート 5

7 OpenIGとは 代 理 認 証 を 実 現 するソフトウェア OpenAMとは 独 立 した 製 品 基 本 的 にはOpenAMと 連 携 して 動 作 させる リバースプロキシ 型 単 独 でリバースプロキシサーバとして 動 作 HTTPリクエストをエミュレートして 認 証 を 代 行 6

8 OpenIG(Open Identity Gateway) OpenIGによる 代 理 認 証 7

9 OpenIG(Open Identity Gateway) 代 理 認 証 処 理 シーケンス HTTP Request ユーザ ユーザからのログインリ クエストをエミュレート 1 4 OpenIG + Java EE Agent ID : user01 Pwd : **** 5 アプリケーション アプリケーション2 8 1 アプリケーション1へ ログインリクエスト 2 Agentがインターセプトして OpenAMへ 認 証 を 依 頼 3 ユーザに 認 証 を 要 求 4 ID パスワードを 入 力 し ログイン 5 ユーザからのログインリクエストを エミュレートし 認 証 を 代 行 6 ログインレスポンスを 返 す OpenAM アプリケーション3

10 OpenIG(Open Identity Gateway) SAML2.0 フェデレーションゲートウェイ 機 能 9

11 REST APIのJSON 出 力 REST APIの 結 果 がJSON 形 式 で 出 力 可 能 に これまでは プレインテキスト XML 形 式 のみに 対 応 URLの/identityの 後 ろに/jsonを 付 加 する QIC5w..* ctid=aqic5w..* 10

12 REST APIのJSON 出 力 レスポンス 11 { } "attributes": [ { "name": "uid", "values": [ "ichiro" ] }, { "name": "userpassword", "values": [ "{SSHA}IoplVXBm9aqW8n+BAg/PBDpOmyTdXnh4vOaSDQ==" ] }, { "name": "sn", "values": [ "suzuki" ] }, { "name": "cn", "values": [ "ichiro" ] }, "roles": [], "token": { tokenid : AQIC5wM2LY4SfcwuPvJ6c2vqr yota3na..*" }

13 リスクベース 認 証 不 正 アクセスのリスクに 配 慮 した 認 証 方 式 ログイン 時 の 地 理 的 位 置 の 評 価 最 終 ログインからの 経 過 時 間 や 認 証 失 敗 回 数 のチェック IPアドレスの 履 歴 チェックを 元 に 追 加 の 認 証 を 要 求 する スコア< 閾 値 パスワード 認 証 スコア> 閾 値 リスクベース 認 証 ログイン 完 了 12 アクセス 環 境 な どを 分 析 してリ スクを 評 価 しス コアを 加 算 追 加 認 証 (OTPなど)

14 リスク 評 価 チェックロジック チェック 方 法 認 証 失 敗 チェック IPレンジチェック IP 履 歴 チェック 既 知 のCookie 値 チェック 最 終 ログインからの 経 過 時 間 チェック プロファイルのリスク 属 性 チェック デバイス 登 録 Cookieチェック 位 置 情 報 国 コードチェック リクエストヘッダーチェック 概 要 ユーザーが 過 去 に 認 証 失 敗 をしているかをチェックする LDAPパスワードポリシーのアカウントロックと 同 時 には 使 用 不 可 クライアントIPアドレスが 指 定 した 範 囲 内 にあるかをチェックする アクセスした 際 のIPアドレスがユーザープロファイルに 記 録 されているIPア ドレスの 履 歴 リストに 存 在 するかをチェックする クライアントのリクエストに 既 知 のCookieが 存 在 し 正 しい 値 を 持 っている かをチェックする ユーザーのログインが 最 後 にログインした 時 刻 から 指 定 した 経 過 時 間 内 であるかをチェックする ユーザープロファイルに 指 定 した 属 性 と 値 が 含 まれているかをチェックする クライアントリクエストに 指 定 された 名 前 のCookieが 含 まれているかを チェックする 位 置 情 報 データベースを 利 用 してクライアントのIPアドレスをチェックする 位 置 情 報 データベースはMaxMindのバイナリフォーマットが 利 用 可 能 クライアントリクエストが 必 須 で 指 定 されたヘッダーおよび 値 を 含 んでいる かをチェックする 13

15 リスク 評 価 前 述 のチェックに 設 定 したスコアの 合 計 値 が リスク 閾 値 に 到 達 しなければ 認 証 成 功 となる 例 ) 以 下 のように 設 定 した 場 合 a. 認 証 失 敗 のチェックのスコア = 1 b. 位 置 情 報 国 コードチェックのスコア = 2 c. リクエストヘッダーチェックのスコア = 3 d. リスク 閾 値 = 4 ケース1: (a)+(b) < (d) 認 証 成 功 ケース2: (a)+(c) = (d) 認 証 失 敗 14

16 OAuth 2.0 クライアント 認 証 OpenAM 10.0ではクライアント 認 証 機 能 が 追 加 OpenAM (OAuth Client) OpenAM 保 護 対 象 アプリケーション OAuth OAuth 2.0 Provider Facebook Google MSN 15

17 OAuth 2.0 クライアント 認 証 Facebook(プロバイダ)と 連 携 した 場 合 の 動 作 は 以 下 のようになる ユーザがOpenAMにアクセス Facebookのログインページにリダイレクト ユーザはFacebookのIDとパスワードを 入 力 する アクセスの 許 可 を 問 われるので ユーザはそれを 許 可 する(Yesボタンクリ ック) OpenAMにログイン 完 了 (この 際 にFacebookのユーザ 情 報 がOpenAMに マッピングまたは 登 録 される) Facebookなど OAuthに 対 応 したサービスのアカウント 情 報 で OpenAMにログイン 可 能 となる 16

18 LDAPパスワードポリシーのサポート IETFに 提 案 されていたLDAPパスワードポリシー 仕 様 を サポート 以 下 のようなポリシーが 利 用 可 能 認 証 連 続 失 敗 によるロックアウト パスワードの 有 効 期 限 設 定 有 効 期 限 ユーザの 猶 予 認 証 注 意 点 全 てのポリシーには 対 応 していない 例 ) 自 分 のパスワード 変 更 の 許 可 禁 止 制 御 は 効 かない LDAPサーバによっては 挙 動 が 異 なる OpenDJ OpenLDAPで 動 作 するポリシーが 異 なる 17

19 LDAPパスワードポリシーのサポート 設 定 方 法 下 記 チェックボックスを 有 効 とする(デフォルトで 有 効 ) 実 行 例 アカウントロック 18

20 2. OpenAM 10.1 Xpress の 新 機 能 OAuth 2.0 プロバイダ 機 能 セッションフェイルオーバの 改 良 OATH 対 応 19

21 OAuth 2.0 プロバイダ 機 能 OpenAM 10.1 Xpressではプロバイダ 機 能 が 追 加 OpenAM (OAuth Client) OpenAM 保 護 対 象 アプリケーション その 他 Web アプリケーション (OAuth Client) OAuth OAuth 2.0 Provider Mobile アプリケーション (OAuth Client) OpenAM Facebook Google MSN 20

22 OAuth 2.0 プロバイダ 機 能 OAuth 2.0で 規 定 されている2つのクライアントタイプ をサポート Confidential Client Public Client エンドポイントURL ユーザ 認 可 アクセストークン 取 得 ユーザープロファイル 取 得 21

23 セッションフェイルオーバーの 改 良 設 定 が 飛 躍 的 に 簡 単 に 以 前 はOpen Message QueueとBerkeley DBの 利 用 が 必 須 で 構 成 が 複 雑 OpenDJのレプリケーション 機 能 を 利 用 内 蔵 の 設 定 データストア(OpenDJ)にセッションデータを 書 き 込 む LB LB OpenAM OpenAM OpenAM OpenAM Message Queue Broker Cluster amsessiondb amsessiondb マルチマスタ レプリケーション 22 Berkeley DB Berkeley DB OpenDJ OpenDJ

24 セッションフェイルオーバーの 改 良 構 築 時 のサイト 設 定 で Enable Session HA Persistence and Failover にチェックを 入 れる 23

25 OATH 対 応 オープンな 認 証 仕 様 であるOATH(Initiative for Open AuTHentication)に 準 拠 したワンタイムパスワード 認 証 に 対 応 2 種 類 のワンタイムパスワード 方 式 HOTP : カウンタベース OTPの 生 成 回 数 (カウンタ) をもとにOTPを 生 成 TOTP : 時 刻 ベース 時 刻 をもとにOTPを 生 成 24

26 OATH 対 応 オープンな 標 準 仕 様 のため OATH 対 応 のトークン 発 行 アプリ/デバイスをそのまま 利 用 可 能 Google Authenticator Android Token DS3 Oath Yubikey 25 ( 出 所 ) Android Token DS3 Oath Yubikey

27 3. NRI 拡 張 機 能 セキュリティ 強 化 XSSチェック リダイレクトURLチェック JDK7 対 応 OpenStandia/Portal(Liferay)との 連 携 機 能 代 理 認 証 機 能 (OpenIGとの 比 較 は 次 ページ 参 照 ) 各 種 バグ 修 正 メモリリーク マルチスレッドでの 問 題 など 26

28 OpenIG と NRI 独 自 代 理 認 証 機 能 の 比 較 アーキテクチャ 拡 張 性 ログイン 方 式 リライト 機 能 フェデレーション ゲートウェイ (SAML) OpenIG Javaで 実 装 J2EEエージェントと 組 みわ せる フィルター ハンドラーで 拡 張 可 能 サーバサイドでログイン 処 理 のPOSTを 行 う POSTする 項 目 を1つ1つ 定 義 する 必 要 あり HTTPヘッダの 書 き 換 えが 可 能 あり NRI 独 自 mod_perlで 実 装 Apache Webエージェントと 組 み 合 わせる 利 用 者 向 けの 拡 張 ポイントなし クライアントサイドでログイン 処 理 のPOSTを 行 う POSTする 項 目 を 定 義 する 必 要 なし( 埋 め 込 むログインID パス ワードのフィールドID 指 定 のみ) HTTPヘッダ コンテンツ 内 容 (HTML JS CSSなど)を 対 象 に 正 規 表 現 で 書 き 換 え 可 能 なし 27

29 OpenAMの 参 考 情 報 Release Notes Installation Guide Administration Guide Developer s Guide ForgeRockによるOpenAM Wiki 28

30 OpenIGの 参 考 情 報 Release Notes Guide to OpenIG Config Reference ex.html 29

31 OpenIDMの 紹 介 30

32 OpenIDMの 概 要 OSSのアイデンティティ 管 理 (ID 管 理 アイデンティティー マネジャー) 製 品 ForgeRock 社 により2010 年 からフルスクラッチで 開 発 オープンスタンダードな 技 術 の 採 用 モジュラー 型 アー キテクチャ 外 部 リソースとのコネクタにOpenICFを 採 用 REST APIの 採 用 などによって 高 い 柔 軟 性 と 拡 張 性 を 備 えたアイデンティティ 管 理 製 品 アドレス 帳 各 種 システム 人 事 DBなど OpenIDM 会 計 システム AD 31 人 事 DB ( 社 員 ID)

33 OpenIDMの 特 徴 REST APIの 採 用 OpenIDMに 対 するあらゆる 操 作 をHTTPで 行 うことが 可 能 であり 他 シス テムとの 連 携 が 容 易 に 可 能 サーバーサイドスクリプトエンジン Java 上 で 動 作 するJavaScriptエンジン(Rhino)を 組 み 込 んでおり 設 定 情 報 マッピング 情 報 カスタムロジックを 柔 軟 に 定 義 可 能 柔 軟 なデータモデル ID 情 報 のスキーマを 要 件 に 合 わせて 柔 軟 に 定 義 可 能 データはJSON 形 式 で 格 納 される 32

34 他 製 品 との 機 能 比 較 基 本 的 な 機 能 は 実 装 されつつある OpenIDMで 不 足 している 機 能 については 拡 張 機 能 としてNRIで 実 装 予 定 機 能 OpenIDM 他 OSS 製 品 商 用 製 品 A Webブラウザによる 設 定 画 面 データ 管 理 機 能 データ 検 索 機 能 データ 同 期 機 能 IDの 一 括 登 録 一 括 変 更 (CSV) (CSV) LDAPグループの 作 成 変 更 IDのLDAPグループへの 配 属 情 報 の 一 括 登 録 CSVアップロード 機 能 CSVダウンロード 機 能 パスワード 自 動 生 成 機 能 理 メール 通 知 機 能 オンラインサインアップ 機 能 マルチバリューカラムの 編 集 プロビジョニング 先 としての 任 意 テーブルの 選 択 アカウントロック 解 除 機 能 複 数 管 理 者 によるユーザー 管 理 機 能 管 理 者 の 階 層 化 機 能 管 理 範 囲 の 指 定 機 能 エンドユーザへの 情 報 公 開 機 能 (ユーザー 自 身 のプロフィール 画 面 ) プロビジョニング 先 としてOracle LDAPおよびMySQLのサポート ロールによる 権 限 管 理 認 証 DB 更 新 履 歴 出 力 機 能 ログ 出 力 33

35 OpenIDMのアーキテクチャ 本 日 はコア 機 能 と WFについてご 紹 介 34 ( 出 所 ) 野 村 総 合 研 究 所 OpenStandia OSS 紹 介 OpenIDM 最 新 情 報

36 OpenIDMの 同 期 機 能 OpenIDMでは 双 方 向 の 同 期 をサポートしている ソースとターゲットを 指 定 して 同 期 の 設 定 を 行 う ソースを 源 泉 データ ターゲットをOpenIDMのリポジトリのデータと 設 定 する と 源 泉 データからのデータ 取 り 込 みとなる 逆 に ソースをOpenIDMのリポジトリ ターゲットを 外 部 リソースに 設 定 すれ ば プロビジョニング 処 理 となる 人 事 DB S: 人 事 DB T:OpenIDM OpenIDM S:OpenIDM T:AD AD 人 事 DB ( 社 員 ID) 35

37 OpenIDMの 同 期 機 能 36 同 期 処 理 方 式 Reconciliation(リコンシリエーション) いわゆる 差 分 同 期 ソースとターゲットを 比 較 し 変 更 点 を 検 知 して 同 期 を 行 う LiveSync 外 部 リソースから 変 更 点 情 報 を 取 得 して 同 期 する 方 法 不 必 要 な 差 分 チェックを 行 わないためリコンシリエーションと 比 べると 軽 いプ ロセス ただし コネクタ 外 部 リソースがLiveSyncに 対 応 している 必 要 がある Automatic Synchronization リポジトリの 更 新 を 検 知 し その 更 新 内 容 をターゲットである 外 部 リソースに 反 映 する 同 期 処 理 の 実 行 トリガー REST APIによるマニュアル 実 行 スケジューラによる 自 動 実 行 リポジトリの 更 新 検 知 による 自 動 実 行 (Automatic Synchronization)

38 同 期 に 関 する 設 定 全 体 像 OpenIDMのリポジトリに 格 納 するデータ(Managed Objects)を 定 義 (managed.json) 外 部 リソース(System Objects)を 表 すコネクタ 定 義 を 設 定 (provisioner-*.json) System ObjectsとManaged Objectsをマッピング 定 義 (sync.json) 実 行 スケジュールを 定 義 (scheduler-*.json) sync.json schedulerrecon.json 人 事 DB provisioner -hr.json OpenIDM provisioner -acc.json 会 計 システム 37 人 事 DB ( 社 員 ID) managed. json provisioner -ad.json AD

39 Managed Objects と System Objects 38 Managed Objects OpenIDMのリポジトリで 管 理 されるオブジェクト JSON 形 式 で 格 納 される デフォルトではユーザーオブジェクトのみだが 任 意 のオブジェクトを 定 義 可 能 managed.jsonで 定 義 { "objects": [ { name : user }, { "name": "group } System Objects 連 携 先 の 外 部 システムのデータを 表 すオブジェクト コネクタ 定 義 を 行 うことで 表 現 provisioner-*.jsonで 定 義 { "name" : HR", "connectorref" : { } "poolconfigoption" : { } "configurationproperties " : { } "objecttypes" : { "account" : {

40 マッピング 定 義 sync.jsonにソースとターゲット 間 でマッピングする 項 目 名 を 定 義 する スクリプトで 加 工 することも 可 能 例 えば 姓 と 名 を 結 合 して 渡 す 場 合 など 39 { "mappings" : [ { "name" : "systemhraccounts_manageduser", "source" : "system/hr/account", "target" : "managed/user", "properties" : [ { "source" : "_id", "target" : "_id" }, { "source" : "lastname", "target" : "lastname" }, { "source" : "firstname", "target" : "firstname" }, { "source" : "", "target" : "displayname", "transform" : { "type" : "text/javascript", "source" : "source.lastname + + source.firstname" } } ソース:System Objects ターゲット:Managed Objects を 指 定 姓 名 を 結 合

41 スケジュール 設 定 schedule-*.jsonに 同 期 (リコンシリエーション)の 実 行 タイミング を 定 義 する { } 実 行 間 隔 を 指 定 "enabled" : true, "type": "cron", "schedule": "* * 2 * *?", "concurrentexecution" : false, "invokeservice": "sync", "invokecontext": { "action": "reconcile", "mapping": "systemhraccounts_manageduser" } 実 行 する 同 期 処 理 のマッ ピング 定 義 名 を 指 定 40

42 リコンシリエーションによる 同 期 例 1 スケジューラ 機 能 で 源 泉 データ 取 り 込 みのリコンシリエーションを 実 行 指 示 ( 毎 日 AM 2 時 ) 人 事 DBのデータ とOpenIDMを 比 較 して 差 分 同 期 2 1の 同 期 完 了 後 ソース(この 場 合 OpenIDM)の 変 更 を 検 知 し Automatic Synchronizationに より 差 分 同 期 される ( 全 件 比 較 されるわけではない) 人 事 DB OpenIDM AD 人 事 DB ( 社 員 ID) リコンシリ エーション スケジューラ 起 動 Automatic Synchronization 41

43 より 高 度 なプロビジョニング 発 令 日 ベースで 連 携 先 システムにIDをプロビジョニング するケース 1 REST APIで 直 接 データを 登 録 更 新 発 令 日 を 登 録 2 スケジューラ 機 能 でADへのプロビ ジョニングのリコンシリエーションを 実 行 指 示 ( 毎 日 AM 4 時 ) OpenIDMとADを 比 較 して 差 分 同 期 を 行 うが 対 象 を 発 令 日 >= システ ム 日 付 のユーザとする ユーザ 管 理 アプリ OpenIDM AD HTTP リコンシリ エーション スケジューラ 起 動 42

44 ( 補 足 )OpenIDMで 連 携 可 能 な 外 部 リソース 標 準 では 以 下 のコネクタが 利 用 可 能 CSV File LDAP Scripted SQL XML File OpenICFで 提 供 される 追 加 コネクタ Database Table Connector GoogleApps Connectior などが 提 供 されている OpenICFの 仕 様 に 従 って 独 自 のコネクタを 作 ることも 可 能 43

45 ワークフロー 連 携 ワークフローエンジンにActivitiを 利 用 ワークフロー 定 義 はActiviti Eclipse Designer, Activiti Explorerを 利 用 する ( 出 所 ) 44

46 ワークフロー 連 携 例 : ユーザー 登 録 のワークフロー 申 請 者 は 登 録 アカウントの 情 報 を 入 力 する 承 認 者 が 承 認 を 行 うと ユーザー 登 録 を 行 い 申 請 者 と 登 録 アカウント に 通 知 を 行 う 承 認 者 が 却 下 した 場 合 は ユーザー 登 録 は 行 われず 申 請 者 に 却 下 を 通 知 する 45

47 ワークフロー 連 携 : 動 作 イメージ 申 請 者 (user1)でログイン 申 請 可 能 なワークフロー 一 覧 から ユーザー 登 録 申 請 を 選 択 する 46

48 ワークフロー 連 携 : 動 作 イメージ 登 録 ユーザ 情 報 を 入 力 し 申 請 を 行 う 47

49 ワークフロー 連 携 : 動 作 イメージ 承 認 者 (manager1)でログイン ユーザー 登 録 申 請 が 表 示 されるので 自 分 にアサイン する 48

50 ワークフロー 連 携 : 動 作 イメージ アサインすると マイタス クに 表 示 されるようになる 登 録 情 報 を 確 認 し 承 認 を 行 う 承 認 が 行 われると 内 部 でアカウント 登 録 処 理 が 行 われる 49

51 ワークフロー 連 携 : 動 作 イメージ 登 録 完 了 後 申 請 者 (user1)に 登 録 完 了 が 通 知 され る 50

52 ワークフロー 連 携 の 注 意 点 ワークフローの 各 タスクの 内 容 はOpenIDMのAPIをコー ルするように 実 装 する 必 要 がある お 絵 描 きするだけで 簡 単 に 動 くものではない 例 ) ユーザー 登 録 タスク ユーザー 登 録 を 行 う OpenIDMのAPIをコール 51

53 OpenIDMの 参 考 情 報 Release Notes Install Guide Integrator s Guide ForgeRockによるOpenIDM Wiki ForgeRockによるOpenIDM blog OpenStandiaによるOpenIDM 最 新 情 報 52

54 OpenStandiaは 攻 めのIT を 支 援 します オープンソースのことなら なんでもご 相 談 ください! お 問 い 合 わせは NRIオープンソースソリューションセンターへ 53 本 資 料 に 掲 載 されている 会 社 名 製 品 名 サービス 名 は 各 社 の 登 録 商 標 又 は 商 標 です NRIオープンソースソリューションセンター NRIオープンソースソリューションセンター Copyright 2013 Copyright 2013 Nomura Nomura Research Research Institute, Institute, Ltd. All Ltd. rights All reserved. rights reserved.