ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Adaptive Access Manager開発者ガイド
11gリリース2(11.1.2)
B71697-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 デバイス識別の拡張

この章では、標準的なデプロイメントでのデバイス識別の拡張方法について説明します。内容は次のとおりです。

13.1 デバイス識別とは

デバイスとは、ユーザーがある場所からのログインに使用するコンピュータ、PDA、携帯電話、キオスクなどです。デバイスIDは、ログイン・セッションに使用する内部Oracle Adaptive Access Manager識別子です。この項では、デバイスを識別し、それにデバイスIDを割り当てるプロセスについて説明します。

このプロセスは、次の3つのステージで構成されます。

13.1.1 データ収集

デバイス識別は、カスタマが使用するデバイスを認識するメカニズムです。フィンガープリント詳細は、デバイスの識別、それがセキュアであるかどうかの確認および認証またはトランザクションのリスク・レベルの特定に役立ちます。ログイン・セッション中に、ブラウザ・タイプ、ブラウザ・ヘッダー、オペレーティング・システム・タイプ、ロケールなどのデータがデバイスのフィンガープリントから収集されます。

データには、セキュアおよびデジタルという2つのカテゴリがあります。これらの各カテゴリ内にはフィンガープリントとCookieが存在します。Oracle Adaptive Access Managerでは、2つのタイプのCookieを使用してデバイス識別を実行します。1つはセキュアなCookie (ブラウザCookieとも呼ばれます)であり、もう1つはデジタルCookie (Flash Cookieとも呼ばれます)です。

  • セキュアなデータはユーザーのブラウザから収集されます。このデータには、ユーザー・エージェント文字列およびHTTP Cookie値が含まれます。ユーザー・エージェントはセキュアなフィンガープリントとして使用されます。HTTP Cookie値は1回かぎり使用される一意のCookieであり、ユーザーがログインするたびに設定されます。このCookie値はログイン時にユーザーのブラウザから取得されます。

  • デジタル・データは、ユーザーのAdobe Flashのインストールから収集されます。このデータにはFlashシステム機能データの配列およびFlashローカル共有オブジェクト(LSO)が含まれます。Flash機能データは、Flashシステム機能を表すデジタル・フィンガープリントとして使用されます。LSOには1回かぎり使用される一意の値が含まれ、この値はユーザーがログインするたびに設定されます。この値は、ログイン時に実行するフラッシュ・オブジェクトを使用して取得されます。

データ収集フローの例は、次のとおりです。

  1. ユーザーがユーザー名を入力します。

  2. ログイン・ジャンプ・ページが表示されます。この2番目のログイン・ページは、フラッシュCookieとセキュアCookieを取得し、ユーザー・デバイスのフィンガープリントを処理するための一時ページです。

  3. 認証前チェックポイント。認証前ルールは、ユーザーが認証される前に実行されます。認証前チェックポイントによって返される共通の値は、許可とブロックです。

  4. AuthentiPadチェックポイント。このステージでは、使用する仮想認証デバイスを判別します。

  5. パスワード・ページが表示されます。

13.1.2 データ処理

このデータを収集した後、OAAMサーバーでは、デバイスのフィンガープリント・データを処理し、このデバイスが既知のものかどうかを判断する必要があります。Oracle Adaptive Access Managerは、デバイスのフィンガープリントを開発するために1つの要素にのみ依存しているわけではありません。永続Cookieが無効になっている場合でも、Oracle Adaptive Access Managerでは他の情報を使用してデバイスが識別されます。たとえば、データ・ポイントが使用できない場合でも、システムでは他のオブジェクト(セキュアCookie、フラッシュCookie、HTTPヘッダー、Real Media、QuickTimeなど)を利用して厳密なセキュリティを実現しています。データ・ポイントの有無に基づいて、デバイスが新規か、または既存のものであるかが判別されます。

デバイスのフィンガープリント処理によってユーザー・セッションごとにフィンガープリントが生成されます。このフィンガープリントはデバイスごとに一意であり、アクセスするたびに別の一意のフィンガープリントに置換されます。

フィンガープリントのデータと一致するデバイスがOAAMデータベースに見つからない場合は、デバイスIDが生成されます。デバイス・フィンガープリントのデータに基づいて既存デバイスを検索するプロセスでは、回転するCookieの値とフィンガープリントが一致しているデバイスの検索が行われます。OAAMでは、フィンガープリント・データに異なる重みを付けています。重み付けを大別すると、フラッシュCookie、フラッシュ・フィンガープリント、セキュアCookie、セキュア・フィンガープリントに分けられます。基準に一致するデバイスが見つかった場合、新規デバイスIDは生成されません。

このプロセスは、デバイス識別チェックポイントでポリシーを作成することによって、拡張または変更できます。このチェックポイントをデバイスのフィンガープリント処理中に実行して、デバイス識別に影響する、処理対象の追加ルールでリスク評価を行うこともできます。デバイス識別のチェックポイント評価で計算されるリスク・スコアは、他のチェックポイントのポリシーで構成されたルールの事前条件で、デバイス・リスクの程度として使用されます。

デバイス・リスクの程度により、識別されるデバイスの確実性を指定します。これは、通常のルールの事前条件として標準です。たとえば、デバイスの程度が0の場合は完全一致であり、500の場合は類似デバイス、スコアが1000の場合は別のデバイスとなります。

13.1.3 データ格納

デバイスにIDが付与されると、新しい回転するCookieの値が生成および設定されます。セキュアCookieはHTTP Cookieとして設定され、デジタルCookieはフラッシュ・オブジェクトによってFlash LSOとして設定されます。デバイス識別プロセス中にユーザーのコンピュータに格納される値は、これらの2つの値のみとなります。

13.2 デバイス識別を拡張するタイミング

多くの標準的なデプロイメントでは、即時利用可能なデバイス識別によってクライアントの要件が満たされますが、そのプロセスを拡張して、追加情報をフィンガープリントに含める機能が必要になることがあります。即時利用可能なデバイス識別では、ブラウザとOAAMフラッシュ・ムービーからのデータを使用します。次に、デバイス識別の拡張が必要と思われる標準的なシナリオを示します。

OAAMの11.1.1.5リリース以降、デバイス識別の拡張に使用でき、ネイティブ統合および非ネイティブ統合の両方で実装可能なフレームワークが用意されています。このフレームワークは、クライアント・サイドの拡張とOAAMサーバーのデバイス識別拡張に分割されています。

13.2.1 前提条件

Oracle Adaptive Access Managerでデバイス識別拡張タスクを実行する際の前提条件を、次のリストに示します。

  • カスタム・デバイス識別拡張はJavaを使用して開発する必要があるため、Javaプログラミングの知識を有している必要があります。

  • クライアント・デバイスに関して収集する情報と、その情報収集に使用するテクノロジを決定しておく必要があります。考慮の対象となる代表的なテクノロジは、アプレット、JavaScriptなどです。

  • OAAM拡張共有ライブラリの開発とデプロイのプロセスについて理解しておく必要があります。OAAM拡張共有ライブラリの詳細は、第7章「OAAM拡張共有ライブラリの使用によるOAAMのカスタマイズ」を参照してください。

13.2.2 カスタム・デバイス識別拡張の開発

カスタム・デバイス識別拡張は、Oracle Adaptive Access Manager提供の即時利用可能なデバイス識別を拡張するソフトウェアです。

13.2.2.1 クライアント・サイド拡張の実装

クライアント・ブラウザで実行可能なクライアント・サイド拡張の実装では、適切なテクノロジを使用して拡張をコード化します。

クライアント・サイド拡張は、次の要件を満たす場合は任意のテクノロジで実装できます。

  • Webページを変更しなくても、クライアント・サイドのブラウザで実行できます。これは非表示であり、ユーザー・コントロール・フローを変更することはありません。

    クライアント・サイド拡張の実装に選択したテクノロジは、ユーザーのブラウザのコンテキストで実行する必要があります。標準的な選択肢として、Flash、JavaScript、Javaアプレットなどのテクノロジがあります。

  • OAAMサーバーとの通信が可能であり、HTTPプロトコルを使用してデータをポストできます

    標準統合でHTTP POSTメソッドを使用している場合は、フィンガープリント・データと回転するCookieをOAAMサーバーに送信する必要があります。

  • 特に重要: データのポスト中に既存のOAAMのHTTPセッションが使用できます。これは、デバイス識別が適切に機能するためには特に重要です。

    フィンガープリント処理データをユーザーのログインと関連付けるために、サーバーに送信されるデータはユーザーのセッションのコンテキストで送信する必要があります。これを実行するには、有効なJSESSIONIDが存在している必要があります。

  • 拡張によって収集されるデータ/値のリストによって、クライアント・デバイスが一意に識別されます

    一般に、ユーザーのデバイスで課せられるデータ制約を考慮すると、OAAMにより収集されるフィンガープリントはできるかぎり一意である必要があります。デバイス識別の拡張中は、ユーザーのデバイスを一意に識別する追加データを収集する最大の機会です。

  • 拡張によってCookie等価を取得し、クライアント・マシンに格納できます

    1回かぎりのCookieの回転という概念は、デバイス・フィンガープリント処理プロセスの中核をなすものです。デバイス識別では、OAAMサーバーにより拡張に指定された値を格納および取得する機能をサポートしている必要があります。

  • 拡張では、HTTPポストを使用して、OAAMサーバー上のflashFingerprint.do URLに次のパラメータを送信できます

    注意: この要件は、標準のOAAM実装を使用している場合にのみ該当します。

    表13-1 flashFingerprint.do URLに対するパラメータ

    パラメータの名前 説明

    client

    クライアント拡張の名前。拡張タイプを示す定数値。

    fp

    クライアント・サイドを識別するすべての名前と値のペアが含まれている連結文字列。名前と値のペアは&を使用して連結され、名前と値は=で区切られます。

    例: os_nameとos_versionが拡張によって収集される場合、fp文字列の値はos_name=windows&os_version=7になります。

    <as determined by the implementation>

    クライアント拡張により格納/保持されるCookie等価値を送信します。


13.2.2.2 カスタム・デバイス識別拡張に関連するプロパティのOAAM拡張共有ライブラリへの追加

静的な値は、新規の拡張を認識できるようにOAAMサーバー内で定義する必要のあるプロパティに関連しています。

カスタム・フィンガープリント・タイプを作成するには、次の手順を実行します。

  1. OAAM拡張共有ライブラリWARのoaam_custom.propertiesファイルを開きます。

  2. 次のプロパティを、列挙要素としてvcrypt.fingerprint.type.enumに追加します。

    注意: <extension-name>を、拡張を表す文字列に置換します。flashとbrowserはOAAM製品ですでに使用されているため、これらの文字列は使用しないでください。

    表13-2 vcrypt.fingerprint.type.enumの要素

    プロパティ名 値の説明

    vcrypt.fingerprint.type.enum.<extension-name>

    100を超える整数値

    vcrypt.fingerprint.type.enum. <extension-name>.name

    拡張を表す名前

    vcrypt.fingerprint.type.enum. <extension-name>.description

    拡張の説明

    vcrypt.fingerprint.type.enum. <extension-name>.processor

    サーバー・サイドにデバイス識別ロジックを実装するプロセッサ・クラスの完全修飾されたJavaクラス名。このクラスの実装方法の詳細は、次の項を参照してください。

    vcrypt.fingerprint.type.enum. <extension-name>.header_list

    クライアント・サイドの拡張により収集されるデータのカンマ区切りリスト。

    vcrypt.fingerprint.type.enum. <extension-name>.header_name_nv

    データおよびデータの読取り可能な名前のカンマ区切りリスト。

    vcrypt.fingerprint.type.enum. <extension-name>. header_value_nv

    値と値の読取り可能な文字列とのマッピングのカンマ区切りリスト。

    bharosa.uio.default.device.identification.scheme

    <extension-name>

    注意: OAAMでカスタム・デバイス認証を使用するために非常に重要です。


  3. フィンガープリント・スキームをフィンガープリント・タイプの列挙要素ID/キーに設定します。

    たとえば、次のようになります。

    bharosa.uio.default.device.identification.scheme=flash

次のフラッシュ・フィンガープリント・タイプを例として示します。

vcrypt.fingerprint.type.enum.flash=2
vcrypt.fingerprint.type.enum.flash.name=Flash
vcrypt.fingerprint.type.enum.flash.description=Flash
vcrypt.fingerprint.type.enum.flash.processor=com.bharosa.uio.processor.device.FlashDeviceIdentificationProcessor
vcrypt.fingerprint.type.enum.flash.header_list=avd,acc,a,ae,ev,ime,mp3,pr,sb,sp,sa,sv,tls,ve,deb,l,lfd,m,os,ar,pt,col,dp,r,v
vcrypt.fingerprint.type.enum.flash.search_list=deb,l,os,v
vcrypt.fingerprint.type.enum.flash.result_list=deb,l,os,v
vcrypt.fingerprint.type.enum.flash.header_name_nv=avd,Audio/Video disabled by user,acc,Has accessibility,a,Has audio,ae,Had audio encoder,ev,Embedded video, ime, Has input method editor (IME) installed,mp3, Has MP3, pr, Supports printer, sb, Supports screen broadcast applications, sp, Supports playback on screen broadcast applications, sa, Supports streaming audio, sv, Supports streaming video, tls, Supports native SSL, ve, Contains video encoder, deb, Debug version, l, Language, lfd, Is local file read disabled, m, Manufacturer, os, Operating System, ar, Aspect ratio of screen, pt, Player type, col, Is screen color, dp, Dots-per-inch (DPI), r, Screen resolution, v, Flash version
#vcrypt.fingerprint.type.enum.flash.header_value_nv=t,true,f,false
vcrypt.fingerprint.type.enum.flash.header_value_nv=t,true,f,false,en,English,es,Spanish,de,German,it,Italian,ja,Japanese,fr,French,ko,Korean,zh,Chinese,ar,Arabic,cs,Czech,da,Danish,nl,Dutch,fi,Finnish,el,Greek,iw,Hebrew,hu,Hungarian,no,Norwegian,pl,Polish,pt,Portuguese,ro,Romanian,ru,Russian,sk,Slovak,sv,Swedish,th,Thai,tr,Turkish,BR,Brazil

13.2.2.3 DeviceIdentification拡張クラスの拡張/実装

DeviceIdentification拡張クラス、com.bharosa.uio.processor.device.DeviceIdentificationProcessorBaseを拡張し、この項で説明するメソッドを実装します。サーバー・サイドの拡張により、必要なメソッドがすべて拡張されます。

13.2.2.3.1 getPlugInHTML

public String getPlugInHTML();

実装により、ログイン・ページに埋め込める有効な拡張HTMLが返されます。このHTMLでは、サポートしているテクノロジがクライアントで使用できなかったり、無効になっている場合に、例外を処理できる必要があります。

次に、拡張HTMLの例を示します。

<applet alt="Browser has Java disabled" name="OAAMDeviceIdentifier" width="0" height="0" 
        code="com.bharosa.uio.processor.device.SampleAppletDeviceIdentifierClient"
        codebase="applet"
        archive="oaam_device_sample_applet.jar">
</applet>

注意: このメソッドは、ユーザーがログイン・ページに移動したときにoaamLoginPage.jspによりコールされます。

13.2.2.3.2 getFingerPrint

public String getFingerPrint();

このメソッドにより、拡張によって送信されたデータを使用してクライアント・デバイスを識別する、一意のフィンガープリントを作成するロジックが実装されます。

このメソッドは、クライアント・サイドの拡張からデバイス識別データがOAAMサーバーに送信されるときにコールされます。

このメソッドは、UIOContext.getCurrentInstance().getRequestをコールしてHttpServletRequestオブジェクトへのハンドルを取得し、クライアント拡張により送信されたデータを読み取ります。

前の項で説明したように、クライアント拡張は、データ・ポイントのリストをfpリクエスト・パラメータの値として1つの文字列で送信します。

このクラスは、この文字列をトークン化してデータ・ポイントとその値のリストを判別します。

13.2.2.3.3 getDigitalCookie

public String getDigitalCookie();

実装により、クライアント拡張から送信されたデジタルCookieが返されます。クライアントとサーバーでは、デジタルCookieを示すHttpパラメータが指定されます。

このメソッドは、UIOContext.getCurrentInstance().getRequestをコールしてHttpServletRequestオブジェクトへのハンドルを取得し、クライアント拡張により送信されたデータを読み取ります。

13.2.2.3.4 getClientDataMap

public Map getClientDataMap(HttpServletRequest request);

実装により、リクエストからデータが読み込まれ、ロギングまたは監査の目的で使用できるマップに格納されます。

13.2.3 相互作用の概要

次に、デバイス識別拡張の動作と、OAAMサーバーとの相互作用の概要を示します。

  1. ユーザーは、OAAMサーバー上のOAAMユーザー・ログイン・ページに移動します。

  2. OAAMサーバーは、デバイス識別構成を使用して、デバイス識別拡張クラスを適切にインスタンス化します。さらに、拡張クラスに、ユーザー・ログイン・ページに埋め込む必要のあるHTMLを要求します。OAAMサーバーは、ユーザー・ログイン・ページをデバイス識別拡張HTMLとともに返します。

  3. ログイン・ページがレンダリングされると、クライアント・ベースの拡張がアクティブになり、デバイスに関する情報が収集されます。

  4. クライアント拡張は、収集されたデータをOAAMサーバー上のデバイス識別URLに送信します。

  5. OAAMサーバーはデバイス識別拡張をコールして、クライアント拡張から収集したデータに基づき、フィンガープリントを取得します。

  6. さらに、フィンガープリントが既存のデバイスに対応しているかどうかを確認します。対応していない場合は、デバイスを新規に作成して、そのデバイスにフィンガープリントを関連付けます。

  7. OAAMサーバーはデバイス識別拡張をコールして、デジタルCookieを取得します。デジタルCookieが存在しない場合は、新規に作成されます。

  8. デジタルCookieがクライアント拡張に返されて、クライアント・マシンに格納されます。

  9. ユーザーIDを入力すると、デジタルCookieまたはブラウザCookie、またはその両方を使用して、ユーザー・リクエストがデバイスに関連付けられます。

  10. 認証後に(成否にかかわらず)、ユーザー・リクエストが認証結果で更新されます。

  11. 今後のログインで同じデバイスを使用する場合は、フィンガープリント処理をしなくても、デジタルCookieを使用してデバイスを検索できます。

13.2.4 コンパイル、アセンブルおよびデプロイ

カスタム・デバイス認証拡張クラスをコンパイルし、OAAM拡張共有ライブラリをアセンブルします。OAAM拡張共有ライブラリのデプロイ手順については、第7章「OAAM拡張共有ライブラリの使用によるOAAMのカスタマイズ」を参照してください。

13.2.5 拡張の実装に関する重要な注意

拡張を実装する際、次の点に留意してください。

  • カスタム・デバイス識別クラスによってクライアント・サイド拡張のアクティブ化に必要な有効なHTMLが出力されることを確認します。

  • クライアント・サイド拡張が、既存のHTTPセッションを使用してOAAMサーバーにデータをポストすることを確認します。