プライマリ・コンテンツに移動
Oracle® Fusion MiddlewareOracle Adaptive Access Manager開発者ガイド
11gリリース2 (11.1.2.3.0)
E67356-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

13 デバイス識別の拡張

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

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

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

次に、デバイス識別の拡張が必要と思われる標準的なシナリオを示します。

  • クライアント・サイドではFlashをサポートしていないため、OAAMフラッシュ・ムービーを使用してクライアントの詳細を取得できません。たとえば、iPhone、iPadなどがあります。

  • ブラウザの内部で実行可能な非フラッシュ拡張を使用して、より厳密なデバイス識別データをクライアントから抽出する必要があります。

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

13.2 デバイス識別の拡張の前提条件

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

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

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

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

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

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

13.3.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.3.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.3.3 DeviceIdentification拡張クラスの拡張/実装

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

13.3.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.3.3.2 getFingerPrint

public String getFingerPrint();

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

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

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

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

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

13.3.3.3 getDigitalCookie

public String getDigitalCookie();

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

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

13.3.3.4 getClientDataMap

public Map getClientDataMap(HttpServletRequest request);

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

13.4 相互作用の概要

次に、デバイス識別拡張の動作と、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.5 コンパイル、アセンブルおよびデプロイ

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

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

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

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

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