4.0
{doctitle}

1. WAMプラグインモジュール

HTTPサーバー上で動作し、サイトコンテンツへのアクセスをフックして閲覧制御を行うモジュールです。WAMモジュールとHTTP連携し、未ログインユーザーのログイン画面へのリダイレクト、閲覧権限に応じたコンテンツアクセス制御などを行います。
Apache HTTP ServerIISJavaEE ServerServerless(JavaScript) で動作するプラグインモジュールを標準で提供します。

1.1. 処理フロー

WAMプラグインモジュールは、サイトコンテンツへのアクセスをフックし、WAMモジュールとHTTP連携して認証・認可の処理を行います。
以下に Apache のWAMプラグインモジュール実装における、認証・認可処理の流れとエラー時のステータスコードを示します。Apache 以外の実装も概ね同様のフローで処理が行われます。

認証・認可処理の流れ

wam sequence1
Figure 1. 未認証時アクセス~ログイン画面まで
  1. ユーザーが管理対象サイトのコンテンツにアクセスします。

  2. Apacheがコンテンツ生成処理を実行する前に、WAMプラグインモジュールの認証・認可ロジックをフックします。

  3. サイトコンテンツ閲覧時のアクセスURLが、設定上、参照制限をかけるパスとして設定されている場合、WAMモジュールに閲覧権限の有無を問い合わせます (WAMモジュールの許可APIへリクエスト)。

  4. 閲覧権限チェックの問い合わせ結果を返却します。認証済みの場合には、ユーザー情報も併せて返却されます(ユーザー情報の返却有無や返却される情報は、WAMプラグインモジュールの設定に依存します)。

  5. 認証済みかつ、ユーザー情報が返却された場合、元のHTTPリクエストヘッダにユーザー情報を付加します。

  6. 閲覧権限チェックの問い合わせ結果に応じて、以下の画面遷移を行います。

    • 未認証の場合 : ログインページへリダイレクト

    • 認証済みの場合 : 元のリクエストに対するコンテンツを応答

    • 認証済みで権限がない場合 : 権限エラーページへリダイレクト

    • その他 : エラーとして、状況に応じたステータスコードをApacheコアモジュールに渡します。通常のコンテンツ処理や後続のApacheモジュール(PHP等)の処理は実行されません。

      wam sequence2
      Figure 2. ログイン画面~コンテンツへのアクセスまで
  7. ユーザーがログイン画面でID、パスワードを入力します。

  8. ログインに成功すると、管理対象サイトのWAMモジュール用URLパス(manageSite > authCallbackUrl)へリダイレクトされます。

  9. WAMモジュールにアクセストークン( = iPLAss上のセッションID)の払出しをリクエストします(WAMモジュールのトークンAPIへリクエスト)。⑧のリダイレクト時にクエリパラメータにセットされた認可コード、WAMプラグインモジュールに設定した管理対象サイトのサイトID、サイトシークレットがパラメータとしてWAMモジュールに送信されます。

  10. WAMモジュールからWAMプラグインモジュールにアクセストークン( = iPLAss上のセッションID)が返却されます。このアクセストークンが管理対象サイト側ドメインのCookieへと格納され、以降、WAMモジュールへの閲覧権限チェックリクエスト時にCookieとして送信するセッションIDとして使用されます。

  11. 元のコンテンツURLへリダイレクトします。 再度②~⑤の処理が発生しますが、アクセストークン( = iPLAss上のセッションID)がCookieとして送信され、認証済みセッションとして扱われます。

エラー時ステータスコード

WAMモジュールの許可API(permission)、トークンAPI(token)の返却結果によっては、WAMモジュールからApacheにエラーのステータスコードを指示します。
その結果、コンテンツ処理が中断されてエラーページが表示されます。以下、ステータスコード及び想定される状況です。

上記番号 ステータスコード 状況

400

WAMプラグインモジュールからWAMモジュールの許可APIへ不正な形式でリクエストしています。
WAMプラグインモジュールとWAMモジュールのバージョン間の不整合などが原因として考えられます。

503

WAMモジュールの許可APIから正常な応答を得られていません。iPLAssサーバーやDB、ネットワークの障害等が考えられます。

403

CSRFトークンのチェックに失敗しています。Cookieに異常がないか、サーバーのスティッキーセッションが機能しているか確認してください。

503

WAMモジュールのトークンAPIから正常な応答を得られていません。iPLAssサーバーやDB、ネットワークの障害等が考えられます。

1.2. WAMプラグインモジュールの設定

WAMプラグインモジュールの設定項目の説明です。WAMプラグインモジュールの設定可能項目/設定方法は各実装によって異なります。

Apache版の場合、各設定項目名はパスカル記法となっており、prefixに Iplass が必要です。
項目 説明 デフォルト値 要変更 Apache IIS JavaEE Serverless

wamBaseUrl
(IplassWamBaseUrl)

WAMモジュールが稼働するiPLAssサーバー側のURLを指定します。WAMプラグインモジュールとWAMモジュール間でHTTP通信する際に使用されます。

形式は以下の通りです。
http[s]://<iPLAssのドメイン>/<サーブレットコンテキストパス>/<テナント名>/

-

wamRedirectUrl
(IplassWamRedirectUrl)

ブラウザからWAMモジュールにリダイレクトする際のベースURLを指定します。

形式は以下の通りです。
http[s]://<iPLAssのドメイン>/<サーブレットコンテキストパス>/<テナント名>/

wamBaseUrl の定義値

-

wamCookieName
(IplassWamCookieName)

iPLAssサーバー上でセッションIDとして使用されるCookie名を指定します。
WAMプラグインモジュールからWAMモジュールへ通信する際、このCookie名に管理対象サイトがCookieに保持するアクセストークンを値としてセットして通信します。

JSESSIONID

-

wamCookieDomain
(IplassWamCookieDomain)

iPLAssサーバー上でセッションIDとして使用されるCookieのドメインを指定します。
WAMモジュール( = iPLAssサーバー)が稼働するドメインを指定してください。
WAMプラグインモジュールとWAMモジュールが同一ドメインで稼動する場合には、定義不要です。

-

-

-

wamCookiePath
(IplassWamCookiePath)

iPLAssサーバー上でセッションIDとして使用されるCookieが有効なパスを指定します。

/

-

-

wamAuthCallbackPath
(IplassWamAuthCallbackPath)

WAM機能の認証フローにおいて、ログイン完了後にWAMモジュールから管理対象サイトへリダイレクトする際に使用されるURLです。 当該URLは、サイトコンテンツのURLに該当しない任意のURLを設定してください。

形式は以下の通りです。
/<任意のパス>

-

siteId
(IplassSiteId)

管理対象サイトを識別するための一意なIDを指定します。
Preferenceの当該管理対象サイトの manageSite > siteId と一致させてください。

-

siteSecret
(IplassSiteSecret)

管理対象サイトのシークレットキーを指定します。
Preferenceの当該管理対象サイトの manageSite > siteSecret と一致させてください。

-

siteCookieName
(IplassSiteCookieName)

アクセストークン( = iPLAss上のセッションID)を管理対象サイト側のドメインにCookieとして発行する際のCookie名を指定します。

ipw

-

siteCookieDomain
(IplassSiteCookieDomain)

アクセストークン( = iPLAss上のセッションID)を管理対象サイト側のドメインにCookieとして発行する際のCookieのDomain属性を指定します。

-

siteCookiePath
(IplassSiteCookiePath)

アクセストークン( = iPLAss上のセッションID)を管理対象サイト側のドメインにCookieとして発行する際のCookieの有効パスを指定します。

指定する場合は以下の項目で指定したURLのパターンを包含するようにしてください。

  • protectedPathPattern

  • addScriptTagPathPattern

  • wamAuthCallbackPath

-

-

siteCookieSameSite

アクセストークン( = iPLAss上のセッションID)を管理対象サイト側のドメインにCookieとして発行する際のCookieのSameSite属性を指定します。

-

-

-

-

-

siteScheme
(IplassSiteScheme)

管理対象サイトのURLスキームを指定します。
有効な値は http または https です。

https

-

charset
(IplassCharset)

WAMモジュール側でのコンテンツ閲覧権限チェック時のパラメータのエンコードやJSONレスポンスのエンコードに使用されます。
管理対象サイトの文字コードと同じものを指定します。

utf-8

-

csrfTokenCookieName
(IplassCsrfTokenCookieName)

一連の認証処理時のCSRF対策用トークンを管理対象サイト側のドメインにCookieとして発行する際のCookie名を指定します。

_csrft

-

protectedPathPattern
(IplassProtectedPathPattern)

管理対象サイトのコンテンツについて、閲覧制限をかけるURLのパスパターンを正規表現で指定します。

windows環境において、ファイルパスはcase-insensitiveとなるのでURLパターンの記述の際にはそのことに留意が必要です。また、HTTPサーバの機能やモジュール等でパスの変換処理を行う際も留意が必要です。

-

-

protectedPattern

管理対象サイトのコンテンツについて、閲覧制限をかけるパターンを ドメイン × パスパターンの正規表現 で指定します。複数指定可能です。
当該設定項目のいずれのドメインにも一致しないドメインでのアクセスの場合、認証・認可処理はスキップされます。

Serverless版での設定例
protectedPattern: [
  { domain: "mysite.example.com", pathPattern: /^\/contents\/.*$/ },
],

-

-

-

-

httpComponentProvider
(IplassHttpComponentProvider)

HTTP通信実装クラスを指定します。
HTTP通信時のカスタマイズが必要なければ、特に指定する必要はありません。

各実装の標準HttpComponentProvider

-

-

wamVerboseLog
(IplassWamVerbose)

ログの冗長化を設定する際に利用します。
true(On) : 冗長化する
false(Off) : 冗長化しない

false(Off)

-

-

-

mapUserAttribute
(IplassMapUserAttribute)

許可APIでコンテンツ閲覧が許可された場合、その後のコンテンツへのリクエスト時のHTTPリクエストヘッダーにユーザー情報をセットする機能を有効化するかを指定します。
true(On) : 有効化する
false(Off) : 有効化しない

false(Off)

-

attributeMap
(IplassAttributeMap)

許可APIでコンテンツ閲覧が許可された場合、その後のコンテンツへのリクエスト時のHTTPリクエストヘッダーにユーザー情報をセットする場合に利用します。 リクエストヘッダー名と値として設定する User エンティティのプロパティ名を指定します。
コンテンツを動的に生成する場合、コンテンツサーバーは当該リクエストヘッダーを参照することでユーザー情報を取得できます。

Apache版での設定例
IplassAttributeMap x-wam-user-id accountId

-

-

allowedIp
(IplassAllowedIp)

WAMの認証・認可処理をスキップできる接続元のIPアドレスを指定します。

-

-

allowedIpHeaderName
(IplassAllowedIpHeaderName)

許可対象のIPアドレスが含まれるかどうかチェックするリクエストヘッダー名を指定します。
デフォルトは X-Forwarded-For です。

X-Forwarded-For

-

allowedIpHeaderFieldIndex
(IplassAllowedIpHeaderFieldIndex)

allowedIpHeaderName で指定したリクエストヘッダーフィールドを , で区切った場合の何番目の要素をチェックするか指定します。最終要素を0として、先頭に戻る方向に数えます。
例えば、X-Forwarded-Forの値の内、後ろから2番目のIPアドレスをチェックしたい場合、1と指定します。 デフォルトは最終要素です。

0 (0で最終要素を指します)

-

loadBalancerCookieName
(IplassLoadBalancerCookieName)

WAMモジュールが稼働するiPLAssサーバーが冗長化されており、ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookie名を指定します。

-

-

siteLoadBalancerCookieName
(IplassSiteLoadBalancerCookieName)

WAMモジュールが稼働するiPLAssサーバーが冗長化されており、ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookieを管理対象サイト側のドメインのCookieとして格納する際のCookie名を指定します。

例えば、当該項目を MYCOOKIE 、loadBalancerCookieName項目を AWSALB と設定すると、AWSのALBから与えられたスティッキーセッション値xxxは、管理対象サイト側のドメインのCookieとして MYCOOKIE=xxx で保存され、ALBには AWSALB=xxx として変換されて渡されます。

-

-

siteLoadBalancerCookieDomain

ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookieを管理対象サイト側のドメインのCookieとして格納する際のDomain属性を指定します。

-

-

-

-

-

siteLoadBalancerCookiePath

ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookieを管理対象サイト側のドメインのCookieとして格納する際の有効パスを指定します。

/

-

-

-

-

siteLoadBalancerCookieDomain

ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookieを管理対象サイト側のドメインのCookieとして格納する際のSameSite属性を指定します。

-

-

-

-

-

addScriptTagPathPattern
(IplassAddScriptTagPathPattern)

WAMの機能により、HTTPレスポンスボディの末尾にscriptタグを追加することができます。
scriptタグを追加したいURLのパターンを正規表現で記述します。

-

-

javaScriptPath
(IplassJavaScriptPath)

addScriptTagPathPattern 項目で追加するscriptタグのsrc属性に設定するパスを指定します。
複数ファイルを読み込ませたい場合は、カンマ(,)で区切ります。
列挙した順番でsrc属性付のscriptタグが出力されます。

-

-

javaScriptSrc
(IplassJavaScriptSrc)

addScriptTagPathPattern 項目で追加するscriptタグで、scriptタグ内部のjavascriptのソースを記述します。

-

-

connectionTimeout
(IplassConnectionTimeout)

WAMプラグインモジュールからWAMモジュールへの通信時(HTTP/HTTPS)のコネクションタイムアウト時間を設定します。
単位はミリ秒です。

-

-

-

soTimeout
(IplassSoTimeout)

WAMプラグインモジュールからWAMモジュールへの通信時(HTTP/HTTPS)のソケットタイムアウト時間を設定します。
単位はミリ秒です。

-

-

proxyHost
(IplassProxyHost)

WAMプラグインモジュールからWAMモジュールへの通信時(HTTP/HTTPS)に利用するプロキシサーバのホスト名を指定します。

-

-

-

proxyPort
(IplassProxyPort)

WAMプラグインモジュールからWAMモジュールへの通信時(HTTP/HTTPS)に利用するプロキシサーバのポート番号を指定します。

-

-

-

noProxyHost
(IplassNoProxyHost)

プロキシサーバを指定した場合に、プロキシを利用しないホストを指定します。

localhost

-

-

includeClientIpToPermissionRequest

接続元IPアドレスをWAMモジュールの許可API呼び出し時にパラメータ(requestInfo)として送信するかをtrue/falseで指定します。
送信する場合、requestInfoのキーは clientIp です。

false

-

-

-

-

clientHeaderToPermissionRequestMapping

ユーザーのコンテンツ要求時のHTTPリクエストヘッダーを、許可API呼び出し時のパラメータ(requestInfo)としてマッピングする場合の設定です。

Serverless版での設定例
clientHeaderToPermissionRequestMapping: [
  { clientHeaderName: "Accept", requestInfoKey: "accept" },
]

-

-

-

-

-

systemErrorPageUrl

500エラー発生時に返却するエラー画面のURLです。絶対パスもしくは相対パスで指定可能です。
この項目が設定されなかった場合、500エラーをJSON形式でレスポンスします。

-

-

-

-

-

unavailableErrorPageUrl

503エラー発生時に返却するエラー画面のURLです。絶対パスもしくは相対パスで指定可能です。
この項目が設定されなかった場合、503エラーをJSON形式でレスポンスします。

-

-

-

-

-

forbiddenErrorPageUrl

403エラー発生時に返却するエラー画面のURLです。絶対パスもしくは相対パスで指定可能です。
この項目が設定されなかった場合、403エラーをJSON形式でレスポンスします。

-

-

-

-

-

defaultErrorRedirectUrl

エラー発生時のデフォルトのリダイレクト先URLです。絶対パスもしくは相対パスで指定可能です。
エラー発生時、エラー画面の取得に失敗した場合などには、当該項目で指定されたURLにリダイレクトします。
この項目が設定されなかった場合、503エラーをJSON形式でレスポンスします。

-

-

-

-

-

IplassIntegrateBasicAuth

基本認証のID/PWでWAMの認証を行います。認証に成功した場合、そのまま管理対象サイトのコンテンツが表示されます。
On/Offで指定します。

Off

-

-

-

-

IplassUrlEncodeCharset

WAMプラグインモジュールからWAMモジュールへのHTTP通信の際、クエリパラメータにURLを含むことがあります。
URLエンコードに利用する文字セットを指定します。

utf-8

-

-

-

-

IplassSslVerifyPeer

WAMモジュールへのHTTP/HTTPS通信時、サーバー証明書の検証するか否かを設定します。
On : 検証する
Off : 検証をスキップ
※ iPLAssのサーバー証明書がWAMの実行環境にバンドルされた証明書ではない場合、Offに設定します。

On

-

-

-

-

IplassSslVerifyHost

WAMからiPLAssへのHTTP/HTTPS通信時、通信先のドメイン名の検証(証明書のcommonNameの定義と一致しているか)するか否かを設定します。
On : 検証する
Off : 検証をスキップ
※ テスト環境では IplassSslVerifyPeer 項目の設定値と同じ値を設定してください。

On

-

-

-

-

IplassSslVersion

SSLプロトコルバージョンを指定します。以下から設定可能です。
0 : SSLv3かTLSv1から通信先で有効なプロトコルが使用されます
1 : TLSv1.xから通信先で有効なプロトコルが使用されます
2 : SSLv2が使用されます
3 : SSLv3が使用されます
4 : TLSv1.0が使用されます
5 : TLSv1.1が使用されます
6 : TLSv1.2が使用されます

1(TLSv1.x)

-

-

-

-

IplassHttpVerbose

WAMモジュールのHTTP通信のログを冗長化します。
On : 冗長化する
Off : 冗長化しない

Off

-

-

-

-

ロードバランサのスティッキーセッションを利用する
WAMモジュールが稼働するiPLAssサーバーを冗長化してロードバランサーのスティッキセッション機能を利用する環境では、 loadBalancerCookieNamesiteLoadBalancerCookieName を正しく設定することで、WAMプラグインモジュールが当該Cookieをロードバランサーに送付するようになります。
Apache版を例にした場合、以下のような設定では、以下図のようにCookieが交換されます。
# ロードバランサのスティッキーセッションのCookie名を指定します.
IplassLoadBalancerCookieName myLB
# 上記Cookieを管理対象サイト側のドメインのCookieに格納する場合のCookie名を指定します.
IplassSiteLoadBalancerCookieName wamMyLB
wam cookie
Figure 3. WAMプラグインモジュール、ロードバランサー、WAMモジュールのCookie連携
javaScriptSrc(IplassJavaScriptSrc)/ javaScriptPath(IplassJavaScriptPath)項目について
WAMの機能により、WAMプラグインモジュールからのHTTPレスポンスボディの末尾にscriptタグが追加されます。
当該タグの目的は、JavaScriptでユーザー情報を取得し、ユーザー情報毎にコンテンツに変更を加える事に利用できます。
サンプルモジュールが、Apache版の「doc/example/js/iplasswam」にありますので、ご参照ください。
IplassJavaScriptSrc/ IplassJavaScriptPathサンプル
ファイル 説明 変更要

iplass-wam.js

WAMオブジェクトを定義したファイルです。
カスタマイズ不要です。

site.js

サイトのサンプルソースです。

site.css

サイトで利用するcssです。

jQuery-1.11.0.min.js

site.jsで利用するlibのファイルです。

1.3. Apache版

Apache版のWAMプラグインモジュールは、有償版iPLAss SDKにビルド済プラグインとして同梱されます。
iPLAss 4.0.22でビルド済プラグインの提供形態が変更されているため、初期設定の手順とWAMシステムライブラリの構成はバージョンによって異なります。ご利用のバージョンに応じた節を参照してください。

iPLAssのバージョン 同梱されるビルド済プラグイン

4.0.22以降

iplass-ee-wam-apache-[バージョン]-el9-gcc-x86_64.tar.gz (RHEL9系向け)

4.0.22未満

iplass-ee-wam-apache-[バージョン]-linux-gcc.tar.gz (Linux向け)
iplass-ee-wam-apache-[バージョン]-win64-vc.zip (Windows向け)

linux-gcc 形式および win64-vc 形式のビルド済プラグインは非推奨です。iPLAss 4.0.22以降のSDKにも当面同梱されますが、今後の機能改善や不具合修正は提供されず、将来的に削除されます。
iPLAss 4.0.22以降をご利用の場合は、 el9-gcc-x86_64 形式のビルド済プラグイン、またはソースコードから独自にビルドしたWAMプラグインモジュールを使用してください。RHEL9系以外のOSについてはソースコードからのビルドを参照してください。
設定方法/設定例はiPLAssのバージョンによらず共通です。

iPLAss 4.0.22以降

初期設定
  1. 事前準備/前提

    • 有償版のSDKに同梱されている iplass-ee-wam-apache-[バージョン]-el9-gcc-x86_64.tar.gz をWebサーバーの任意のパスに配置してください。

    • 以降の説明では、Apacheのインストールディレクトリを %APACHE_HOME% と表記します。

    • Apacheをデーモン形式で実行することを前提とします。

    • 以降の手順はRHEL9系を前提としています。ソースコードから独自にビルドしたWAMプラグインモジュールを使用する場合も、モジュールと依存ライブラリの配置、環境変数の設定は同様です。ただし、パッケージのインストールコマンドとSELinux関連の手順は、使用するOSに読み替えてください。

  2. WAMプラグインモジュールの配置

    • Webサーバーの %APACHE_HOME%/modules にWAMプラグインモジュールを配置します。 iplass-ee-wam-apache-[バージョン]-el9-gcc-x86_64.tar.gz 内の以下のファイルが対象です。

      • mod_iplass_ee_wam_apache.so

  3. Apacheの設定

    • WAMプラグインモジュールの設定ファイル(iplass-wam.conf)を %APACHE_HOME%/conf.modules.d に配置します。設定項目の詳細はWAMプラグインモジュールの設定を参照してください。
      ※ Apacheの設定ファイル(httpd.conf)から、配置した iplass-wam.conf をIncludeしていることを確認してください。

    • WAMシステムライブラリのうち、RHEL9系の標準リポジトリで提供されるものを導入します。

      dnf install boost-regex boost-random
    • 続けて、httpdプロセスの環境変数を設定し、配布パッケージに同梱されたWAMシステムライブラリを参照可能にします。
      iplass-ee-wam-apache-[バージョン]-el9-gcc-x86_64.tar.gz 内の lib/ ディレクトリ一式(同梱ライブラリ・文字コード変換モジュール)を任意のパスに配置します。
      以下は、lib/ の配置先を /opt/iplass-wam/lib とした場合の設定例です。
      systemd管理のhttpdでは、systemctl edit httpd でドロップイン用ファイルを作成し、次のように設定します。

      ドロップイン用ファイル(/etc/systemd/system/httpd.service.d/override.conf)
      [Service]
      Environment="LD_LIBRARY_PATH=/opt/iplass-wam/lib"
      Environment="APR_ICONV_PATH=/opt/iplass-wam/lib/iconv"

      保存後はhttpdを再起動してください。

      /etc/sysconfig/httpd に設定を記載する場合は、ドロップイン用ファイルに EnvironmentFile=/etc/sysconfig/httpd を追記してください。
      SELinuxが有効(enforcing)な環境では次の設定が必要です。
      (1)WAMプラグインモジュール本体への restorecon -v の適用。
      (2)同梱ライブラリへのセキュリティコンテキストの付与。semanage fcontext -a -t lib_t "/opt/iplass-wam/lib(/.*)?" で登録したうえで restorecon -Rv /opt/iplass-wam/lib を適用します。
      (3)httpdからiPLAssへのHTTP接続の許可。setsebool -P httpd_can_network_connect 1 を設定します。未設定のときは権限チェックの通信が拒否され、保護対象パスへのアクセスが503エラーとなることがあります。
    • 配置後の確認として、以下を実行してください。

      # WAMプラグインモジュールが依存するライブラリをすべて解決できるかを確認します(出力が無ければOK)
      LD_LIBRARY_PATH=/opt/iplass-wam/lib ldd "$APACHE_HOME/modules/mod_iplass_ee_wam_apache.so" | grep "not found"
      
      # 同梱ライブラリを配置先から参照しているかを確認します(libjsoncpp.so、libapriconv-1.soが配置先のパス配下と出力されればOK)
      LD_LIBRARY_PATH=/opt/iplass-wam/lib ldd "$APACHE_HOME/modules/mod_iplass_ee_wam_apache.so" | grep "/opt/iplass-wam"
      
      # Apacheの設定ファイルの構文を確認します(Syntax OKと出力されればOK)
      LD_LIBRARY_PATH=/opt/iplass-wam/lib httpd -t
      
      systemctl restart httpd
      
      # WAMプラグインモジュールがロードされているかを確認します(iplass_ee_wam_apache_module (shared)と出力されればOK)
      LD_LIBRARY_PATH=/opt/iplass-wam/lib httpd -M 2>/dev/null | grep iplass
  4. WAMシステムライブラリ
    WAMシステムライブラリを参照してください。

WAMシステムライブラリ

Apache版WAMプラグインモジュールが依存するライブラリは以下のとおりです。

ライブラリ バージョン 提供形態

libcurl

8.21.0

WAMプラグインモジュールへ静的リンク

JsonCpp

1.9.7

配布パッケージのlib/に同梱

APR-iconv

1.2.2

配布パッケージのlib/に同梱

Boost(regex/random)

1.75

システム参照

GMP

6.2

システム参照

APR

1.7

システム参照

APR-util

1.6

システム参照

OpenSSL

3系

システム参照

zlib

1.2

システム参照

libidn2

2.3

システム参照

「システム参照」は、OSが提供するライブラリを使用することを示します。
上表のバージョンは、RHEL9系の標準リポジトリが供給するバージョンです。
JsonCpp・APR-iconvは、RHEL9系の標準リポジトリで取得できないため配布パッケージに同梱しています。

OpenSSL・zlib・libidn2・APR・APR-utilは、httpdプロセス自身が使用するライブラリのため同梱していません。
httpdプロセス内でシステム側とバージョンが混在する可能性があるため、これらのライブラリを配布パッケージの lib/ へ追加しないでください。
ソースコードからのビルドで独自ビルドする場合は)libcurlは7.84以降を使用してください。7.84より前のバージョンは curl_global_init() / curl_global_cleanup() がスレッドセーフではありません。
スレッドを使用するMPM構成で並行リクエストを処理した際に、問題が生じる可能性があります。
ビルド済プラグインの動作環境

ビルド済プラグイン iplass-ee-wam-apache-[バージョン]-el9-gcc-x86_64.tar.gz はRHEL9系を対象としています。
RHEL・Rocky Linux・AlmaLinux・Oracle Linux 9の全マイナーリリースで動作します。RHEL10系での動作は保証されません。
実行環境に必要なRPMパッケージは、httpd(2.4系)・boost-regex・boost-random・openssl-libs・zlib・libidn2です。いずれもRHEL9系の標準リポジトリで供給され、EPELなどの外部リポジトリは不要です。
RHEL9系以外のOSで使用する場合は、ソースコードからのビルドを参照してください。

脆弱性対応時のライブラリ更新

依存ライブラリに脆弱性が発見された場合の更新方法は、提供形態ごとに異なります。

  • システム参照のライブラリ(OpenSSL・zlib・libidn2・APR・APR-util・Boost・GMP)
    OSのパッケージ更新を適用してください。WAMプラグインモジュールの依存はsoname単位で解決されるため、sonameを維持するパッケージ更新であれば再配布・再ビルドは不要です。
    更新後はhttpdを再起動してください。

  • 同梱ライブラリ(JsonCpp・APR-iconv)
    原則としてiPLAssのリリースで更新版を提供します。 緊急に利用者側で更新する場合は、ソースコードからのビルドの手順で対象ライブラリの修正版をビルドします。 ビルドしたファイルで、lib/ 内の同名ファイル(soname名)を差し替えてください。 ただしsonameが変わる更新はファイルの差し替えでは動作せず、WAMプラグインモジュール自体の再ビルドが必要です。

  • 静的リンクのlibcurl
    WAMプラグインモジュールへ静的リンクしているため、単体での差し替えはできません。 iPLAssのリリースで更新するか、ソースコードからのビルドの手順で新しいlibcurlに対してWAMプラグインモジュールを再ビルドしてください。 なおHTTP/HTTPS以外のプロトコルと不要な機能を無効化してビルドされているため、無効化済み機能の脆弱性の影響は受けません。

ソースコードからのビルド

有償版iPLAss SDKに同梱されているソースパッケージから、独自にビルドする場合の手順概要を示します。
ビルド済プラグインを提供していないOSで使用する場合や、依存ライブラリのバージョンを独自に選定する場合に参照してください。

動作確認済みの実行環境はRHEL9系およびAmazon Linux 2023です。それ以外のOSでの動作は個別に検証してください。
  • ビルドツールと開発パッケージ

C++コンパイラ・make・autoconf・automake・libtool・cmakeに加え、httpd(2.4系)・APR・APR-util・OpenSSL・zlib・libidn2・Boost・GMPの開発パッケージ(ヘッダ)が必要です。
利用しているパッケージマネージャでインストールしてください。以下はRHEL9系での例です。

# dnf install gcc-c++ make autoconf automake libtool cmake pkgconf-pkg-config \
    httpd-devel apr-devel apr-util-devel openssl-devel zlib-devel libidn2-devel \
    boost-devel gmp-devel
  • APR-iconv、JsonCpp

この2つはRHEL9系の標準リポジトリに存在しないため、上流ソースからビルドします。
利用しているパッケージマネージャで取得できる場合は、そちらを使用しても構いません。インストール先(この例では /opt/wam-build )は任意です。

# tar zxf apr-iconv-1.2.2.tar.gz
# cd apr-iconv-1.2.2
# ./configure --prefix=/opt/wam-build/apr-iconv --with-apr=[apr-1-configのパス]
# make
# make install
# tar zxf jsoncpp-1.9.7.tar.gz
# cd jsoncpp-1.9.7
# mkdir build
# cd build
# cmake .. -DCMAKE_INSTALL_PREFIX=/opt/wam-build/jsoncpp -DBUILD_SHARED_LIBS=ON
# make
# make install
  • libcurl

静的ライブラリとしてビルドします。OpenSSL・zlib・libidn2を有効にし、HTTP/HTTPS以外のプロトコルと不要な機能は無効化してください。

# tar zxf curl-8.21.0.tar.gz
# cd curl-8.21.0
# ./configure --prefix=/opt/wam-build/curl \
    --disable-shared --enable-static --with-pic \
    --with-openssl --with-zlib --with-libidn2 \
    [不要なプロトコル・機能を無効化するオプション]
# make
# make install
無効化の対象と指定できるオプションはlibcurlのバージョンによって異なるため、 ./configure --help で確認してください。
configureのサマリー出力で、Protocolsに不要なプロトコルが含まれていないこと、IDNが enabled(libidn2)であることを確認してください。
CA証明書バンドルのパスはconfigureが自動検出します。自動検出されない環境では --with-ca-bundle オプションでパスを指定してください。
  • WAMプラグインモジュール

# cd [ソースパッケージの展開先]
# make clean build

ビルド成果物は bin/release/mod_iplass_ee_wam_apache.so に生成されます。
依存ライブラリのインストール先を /opt/wam-build 以外にした場合は make WAM_DEPS_ROOT=[インストール先] clean build としてください。

iPLAss 4.0.22未満

本節が対象とするビルド済プラグイン( linux-gccwin64-vc 形式)は非推奨です。今後の機能改善や不具合修正は提供されず、将来的に削除されます。
これらのビルド済プラグインはiPLAss 4.0.22以降のSDKにも当面同梱されるため、iPLAss 4.0.22以降で継続して利用する場合も本節を参照してください。新規に導入する場合はiPLAss 4.0.22以降を参照してください。
初期設定
  1. 事前準備/前提

    • 有償版のSDKに同梱されている iplass-ee-wam-apache-[バージョン]-[OS/処理系].[拡張子] (例 : iplass-ee-wam-apache-[バージョン]-linux-gcc.tar.gz)をWebサーバーの任意のパスに配置してください。

    • 以降の説明では、Apacheのインストールディレクトリを %APACHE_HOME% と表記します。

    • Apacheをデーモン形式で実行することを前提とします。

  2. WAMプラグインモジュールの配置

    • Webサーバーの %APACHE_HOME%/modules にWAMプラグインモジュールを配置します。 iplass-ee-wam-apache-[バージョン]-[OS/処理系].[拡張子] 内の以下のファイルが対象です。

      • mod_iplass_ee_wam_apache.so

  3. Apacheの設定

    • WAMプラグインモジュールの設定ファイル(iplass-wam.conf)を %APACHE_HOME%/conf.modules.d に配置します。設定項目の詳細はWAMプラグインモジュールの設定を参照してください。
      ※ Apacheの設定ファイル(httpd.conf)で、 %APACHE_HOME%/conf.modules.d に配置したWAMプラグインモジュールの設定ファイル(iplass-wam.conf)をIncludeしていることを確認してください。

    • Linux環境の場合、httpdプロセスの環境変数を編集し、WAMプラグインモジュールの依存するシステムライブラリを参照可能とする必要があります。
      initスクリプトでApacheをデーモン起動している場合、httpdプロセスの環境変数 LD_LIBRARY_PATH からWAMプラグインモジュールの依存するシステムライブラリを参照可能とします。
      以下、ライブラリのインストール先を /opt/wam/local とした場合の設定例です。 /etc/sysconfig/httpd に以下を追加します。

      WAM_LOCAL=/opt/wam/local
      WAM_LIB_PATH=\
      ${WAM_LOCAL}/boost/lib\
      :${WAM_LOCAL}/jsoncpp/lib\
      :${WAM_LOCAL}/openssl/lib\
      :${WAM_LOCAL}/zlib/lib\
      :${WAM_LOCAL}/libidn/lib\
      :${WAM_LOCAL}/curl/lib\
      :${WAM_LOCAL}/apr/lib\
      :${WAM_LOCAL}/apr-iconv/lib\
      :${WAM_LOCAL}/apr-util/lib\
      :${WAM_LOCAL}/gmp/lib
      
      LD_LIBRARY_PATH="$WAM_LIB_PATH:$LD_LIBRARY_PATH"
      export LD_LIBRARY_PATH
      SELinuxを有効にしている環境では、ライブラリにセキュリティコンテキストを付与する必要があります。
      まず、他の.soファイルに付与されているコンテキストをls -Zコマンドで確認します。
      次に、上記パスの各ライブラリに対して、chconコマンドで当該コンテキストを付与します。
      この操作により、httpdプロセスからライブラリへのアクセスが可能となります。
    • Windows環境の場合、 iplass-ee-wam-apache-[バージョン]-win64-vc.zip 内の bin/ にあるDLLファイルを %APACHE_HOME%/bin にコピーします。

  4. WAMシステムライブラリ
    WAMシステムライブラリを参照してください。

WAMシステムライブラリ

Apache版WAMプラグインモジュールの依存するライブラリは以下のとおりです。

ライブラリ バージョン

Boost

1.5.5

jsoncpp

0.6.0

GMP

5.1.2

GNU IDN

1.18

zlib

1.2.11

OpenSSL

1.0.2.k

libcurl

7.34.0

APR

1.5.2

APR-iconv

1.2.1

APR-util

1.5.4

以下、AmazonLinux環境/GCC4.8.2におけるシステムライブラリインストール手順を示します。
yum等、利用しているリポジトリマネージャに該当ライブラリが存在しない場合、参考にしてください。

  • ビルドツール

以下のyumコマンドにより、ビルド中に使用するツールをインストールしておきます。

# yum install gcc gcc-c++ autoconf automake
# yum install unzip
# yum install cmake
# yum install bzip2
# yum install libtool
# yum install dos2unix
# yum install zip

以降、各ライブラリのビルド手順を示します。必要に応じて、prefixオプションで任意ディレクトリにインストールしてください。

  • Boost

# cd [your/build/work/dir]
# tar zxf [your/scp/upload/path/to]/boost_1_55_0.tar.gz
# cd boost_1_55_0
#./bootstrap.sh --prefix=/usr/local
#./b2 install
  • jsoncpp

# unzip [your/scp/upload/path/to]/jsoncpp-master.zip
# cd jsoncpp-master
# mkdir build
# cd build
# cmake -DCMAKE_BUILD_TYPE=release -DJSONCPP_LIB_BUILD_SHARED=ON -DJSONCPP_WITH_TESTS=OFF -G "Unix Makefiles" ..
# make
# mkdir /usr/local
# cd ..
# cp -r include/ /usr/local
# cp -r build/lib/ /usr/local
  • GMP

# bzip2 -dc [your/scp/upload/path/to]/gmp-5.1.2.tar.bz2 | tar xf -
# cd gmp-5.1.2
#./configure --prefix=/usr/local
# make
# make install
  • GNU IDN

# tar zxf  [your/scp/upload/path/to]/libidn-1.18.tar.gz
# cd libidn-1.18
#./configure --prefix=/usr/local
# make
# make install
  • zlib

# tar zxf [your/scp/upload/path/to]/zlib-1.2.11.tar.gz
# cd zlib-1.2.11/
#./configure --prefix=/usr/local
# make
# make install
  • OpenSSL

# tar zxf [your/scp/upload/path/to]/openssl-1.0.2k.tar.gz
# cd openssl-1.0.2k
#./config --prefix=/usr/local threads shared zlib-dynamic
# vi Makefile
ZLIB_INCLUDE=
→ZLIB_INCLUDE= -I/mnt/ebs/opt/wam/local/zlib/include
# make
# make -W install_docs install
  • libcurl

# tar zxf [your/scp/upload/path/to]/curl-7.34.0.tar.gz
# cd curl-7.34.0/
# export LD_LIBRARY_PATH=/usr/local /lib
(LD_LIBRARY_PATHにopenssl、zlib、libidnのlib/のパスを含めます)
# CPPFLAGS="-I/usr/local/include" \
LDFLAGS="-L/usr/local/lib" \
./configure --prefix=/usr/local
(openssl、zlib、libidnの各include/パスを-Iオプション、各lib/のパスを-Lオプションで1つずつ指定します。)
# make
# make install
libcurlでは、利用する機能によってはzlib、OpenSSLなど他のライブラリが
必要な場合があります。configureの出力で、各機能の有効無効を示す表示を確認することができます。
上記手順では、SSL support、zlib support、IDN supportが enabled となることを確認してください。
  • APR

# tar zxf [your/scp/upload/path/to]/apr-1.5.2.tar.gz
# cd apr-1.5.2
#./configure --prefix=/usr/local
# make
# make install
configure実行時、rm: cannot remove 'libtoolT': No such file or directory と出力された場合がありますが、WAMモジュール利用には影響ありません。無視して進めてください。
  • APR-iconv

# tar zxf [your/scp/upload/path/to]/apr-iconv-1.2.1.tar.gz
# cd apr-iconv-1.2.1
#./configure --prefix=/usr/local --with-apr=/usr/local
# make
# make install
  • APR-util

# tar zxf [your/scp/upload/path/to]/apr-util-1.5.4.tar.gz
# cd apr-util-1.5.4
#./configure --prefix=/usr/local --with-apr=/usr/local --with-apr-iconv=../apr-iconv-1.2.1
(--with-apr-iconvオプションではapr-iconvのソースコードパスを指定します)
# make
# make install
Windows環境でのCurlライブラリは、OpenSSL/1.0.2k、zlib/1.2.11、libidn/1.18、libssh2/1.4.3、librtmp/2.3に
依存しており、これらはApache実行環境に含まれている必要があります。 OpenSSLはlibeay32, ssleay32 (Linuxでのライブラリ名はlibssl、libcrypto)に依存していますが、
Apache2.4にビルトインされているため特に何か作業をする必要はありません。

設定方法/設定例

Apache版のWAMプラグインモジュールでは、iplass-wam.conf を使ってWAMプラグインモジュールの設定を行います。

サンプル
# WAMプラグインモジュールをロードします.
LoadModule iplass_wam_plugin_apache_module modules/mod_iplass_wam_plugin_apache.so

# 管理対象サイトの識別情報です. AdminConsoleで設定した値と一致させてください.
IplassSiteId local
IplassSiteSecret 123

# 管理対象サイトのドメインとプロトコルを指定します.
IplassSiteCookieDomain mysite.example.com
IplassSiteScheme https

# WAMモジュールが稼働するiPLAssサーバーのURLを指定します.
IplassWamBaseUrl https://my.iplass.jp/myiplassapp/mytenant/
IplassWamCookieDomain my.iplass.jp

# 管理対象サイトで認証処理を組み込みたいパスパターンを正規表現で指定します.
IplassProtectedPathPattern "^/contents/.*$"

# 認証時にコールバックとして使う管理対象サイトのパスを指定します. そのサイトで未使用のパスとしてください.
IplassWamAuthCallbackPath /wamauthcallback

# WAMモジュールとWAMプラグインモジュールでアクセストークンをやり取りするためのCookie名とパスを指定します.
IplassWamCookieName JSESSIONID
IplassWamCookiePath /
IplassSiteCookieName ipw
IplassSiteCookiePath /

# CSRFトークンをやり取りするためのCookie名を指定します.
IplassCsrfTokenCookieName _csrft

# WAMモジュールからのJSONレスポンスの文字コードを指定します.
IplassCharset utf-8
iPLAssのUserエンティティを連携する

管理対象サイト側のプログラム言語で独自に認可処理を組み込んだり、ユーザー情報を利用したりしたい場合、次のように設定します。
この例では、独自に定義したリクエストヘッダーにWAMモジュールから返却されたユーザー情報が格納されるようになります。

IplassMapUserAttribute On
IplassAttributeMap x-wam-user-id accountId
IplassAttributeMap x-wam-user-name name

例えばPHPの場合、次のようなソースコードでUserエンティティ情報を取得可能です。

<?php
header("Content-Type: text/html; charset=UTF-8");
echo “get user data from WAM Headers. <br/>";
foreach (getallheaders() as $name => $value) {
    echo “ '$name': '$value' <br/> ";
}
<br/>";
?>
Apacheの基本認証と統合する

以下は、Apacheの基本認証と統合する設定です。基本認証に成功した場合、WAM機能の認証処理をスキップできます。

IplassIntegrateBasicAuth On
localhostのiPLAssと連携する

以下は、管理対象サイトとiPLAssを同一サーバーで稼動させる環境の設定です。

IplassWamBaseUrl http://localhost:8080/mytenant/
IplassWamRedirectUrl https://mysite.example.com/myiplassapp/mytenant/
IplassWamCookieDomain

RewriteRule ^/wamauthcallback(.*) /wamauthcallback$1 [L] (1)
RewriteRule ^/contents/(.*) /contents/$1 [L] (1)
1 ApacheからiPLAssのアプリケーションサーバーにプロキシしている環境では、コールバックのパスと認証対象のコンテンツのパスをプロキシしないようにリライトルールを定義します。
コンテンツにJavaScriptを追加する

以下は、指定したパスパターンにマッチするコンテンツの末尾に任意のJavaScriptを追加する設定です。

IplassJavaScriptPath "/iplasswam/jquery-1.11.0.min.js,/iplasswam/sitexhr2.js" (1)

IplassJavaScriptSrc "iplass.wam.init({wamBaseUrl: \"https://my.iplass.jp/myiplassapp/mytenant/\", funcSignIn: addWamSignInNavi, funcSignOut: addWamSignOutNavi}); $(document).ready(function(){addCss();iplass.wam.addUserInfoContent();});" (2)

IplassAddScriptTagPathPattern "/index.php" (3)
1 script要素のsrc属性で読み込むJavaScriptファイルを指定します。
2 JavaScriptを記述します。
3 パスのパターンを指定します。
開発環境向けの設定

管理対象サイトのサーバーとiPLAssが稼働するサーバーの間にプロキシがある環境では、次のように設定します。

IplassProxyHost my.proxy.host
IplassProxyPort 8080

iPLAssサーバーに自己署名のサーバー証明書を利用する場合、次のように設定します。

IplassSslVerifyPeer Off
IplassSslVerifyHost Off

WAMプラグインモジュールのデバッグログを有効にする場合、次のように設定します。
合わせて、Apache本体のログレベルをdebugに指定してください。

IplassWamVerbose On
IplassHttpVerbose On

LogLevel debug

1.4. IIS版

初期設定

  1. 事前準備/前提

    • 有償版のSDKに同梱されている iplass-ee-wam-iis-[バージョン].zip をIISサーバーに配置してください。

    • 以降の説明では、IISのインストールディレクトリを %IIS_HOME% と表記します。

    • サイトのルートフォルダを %WWW_ROOT% と表記します。

    • IISのインストール時の「機能の選択」で ASP.NET4.5 を選択していることを前提とします。

  2. WAMプラグインモジュールの配置

    • IISサーバーの %WWW_ROOT%/bin にWAMプラグインモジュールを配置します。iplass-wam-iis-[バージョン].zip 内の以下のファイルが対象です。

      • DynamicJson.dll

      • IplassEEWamIIS.dll

      • log4net.dll

  3. IISの設定

    • iplass-ee-wam-iis-[バージョン].zip に格納されている設定ファイルを以下のように配置します。

      • WAMプラグインモジュールの設定ファイル(IplassWamPlugin.xml)を %WWW_ROOT%/bin に配置します。設定項目の詳細はWAMプラグインモジュールの設定を参照してください。

      • ログの設定ファイル(log4net.xml)を %WWW_ROOT%/bin に配置します。

      • IISの設定ファイル(Web.config)を %WWW_ROOT% に配置します。

      • 同梱された設定ファイル(applicationHost.config)を参考に、IISの構成システムのルートファイル(applicationHost.config)へserverRuntimeタグを追記してください。
        設定内容を反映すると、キャッシュの抑制が設定されます。 以下、Default Web Site を対象サイトとした場合の追加内容です。

<location path="Default Web Site">
  <system.webServer>
    <serverRuntime frequentHitTimePeriod="00:00:00" />
  </system.webServer>
</location>

設定方法/設定例

IIS版のWAMプラグインモジュールでは、IplassWamPlugin.xml を使ってWAMプラグインモジュールの設定を行います。

  • propertyタグのname属性に設定項目名、value属性に値を定義します。

  • WAMプラグインモジュールの基本的な設定は、type属性が WamPluginConfig のcomponentタグで設定します。

  • SSL/TLS設定やプロキシ、タイムアウト時間などHTTP通信に関わる設定は、type属性が HttpComponentConfig のcomponentタグで設定します。

  • 設定項目の詳細はWAMプラグインモジュールの設定を参照してください。

サンプル
<?xml version="1.0" encoding="UTF-8"?>
<componentDefinition>
  <component type="Iplass.Wam.Config.WamPluginConfig">
    <property name="siteId" value="local"/>
    <property name="siteSecret" value="123"/>
    <property name="siteCookiePath" value="/"/>
    <property name="siteCookieName" value="ipw"/>

    <!-- 管理対象サイトのドメイン/プロトコル -->
    <property name="siteCookieDomain" value="my.site.domain"/>
    <property name="siteScheme" value="https"/>

    <!-- WAMモジュールが稼働するiPLAssサーバーのURL -->
    <property name="wamBaseUrl" value="https://iplass.domain/mtp/mytenant/"/>

    <!-- 認証対象のURLパスパターン. -->
    <property name="protectedPathPattern" value="/mycontents/.*"/>
    <!-- 特定IPを許可します. -->
    <property name="allowedIp" value="x.x.x.x/x" />
    <property name="allowedIp" value="y.y.y.y/y" />
    <property name="allowedIpHeaderName" value="X-Forwarded-For" />

    <!-- 認証処理のコールバックのパス. -->
    <property name="wamAuthCallbackPath" value="/wamauthcallback"/>

    <property name="loadBalancerCookieName" value="myLB"/>
    <property name="siteLoadBalancerCookieName" value="wamMyLB"/>
    <property name="wamCookieName" value="JSESSIONID"/>
    <property name="wamCookiePath" value="/"/>
    <property name="csrfTokenCookieName" value="CSRFTOKEN"/>
    <property name="charset" value="UTF-8" />

    <!-- Userエンティティをリクエストヘッダーに連携します. -->
    <property name="mapUserAttribute" value="True" />
    <property name="attributeMap" className="Iplass.Wam.Config.AttributeMap">
      <property name="mappedAttributeName" value="x-wam-user-id"/>
      <property name="userAttributeName" value="accountId"/>
    </property>
    <property name="attributeMap" className="Iplass.Wam.Config.AttributeMap">
      <property name="mappedAttributeName" value="x-wam-user-name"/>
      <property name="userAttributeName" value="name"/>
    </property>

    <property name="logConfigPath" value="bin\log4net.xml"/>
    <property name="wamVerboseLog" value="True"/>
  </component>

  <component type="Iplass.Wam.Config.HttpComponentConfig">
    <property name="timeout" value="300000"/>

    <!-- HTTP Proxy -->
    <property name="proxyHost" value="my.proxy.host"/>
    <property name="proxyPort" value="8080"/>
    <property name="noProxyHost" value="localhost"/>
    <property name="noProxyHost" value="x.x.x.x"/>

    <!-- SSL/TLS -->
    <property name="sslCertificateValidation" value="True"/>
  </component>
</componentDefinition>

1.5. JavaEE版

初期設定

  1. 事前準備/前提

    • 有償版のSDKに同梱されている iplass-ee-wam-jee-[バージョン].zip をアプリケーションサーバーに配置してください。

    • 以降の説明では、Tomcatのインストールディレクトリを %TOMCAT_HOME% と表記します。

  2. WAMプラグインモジュールの配置

    • アプリケーションサーバーの %TOMCAT_HOME%/webapps/{プロジェクト名}/WEB-INF/lib にWAMプラグインモジュールを配置します。iplass-wam-jee-[バージョン].zip 内の以下のファイルが対象です。

      • iplass-ee-wam-jee-[バージョン].jar

  3. JavaEEの設定

    • iplass-ee-wam-jee-[バージョン].zip に格納されている設定ファイル/ライブラリを以下のように配置します。

      • WAMプラグインモジュールの設定ファイル(iplass-wam-config.xml)を %TOMCAT_HOME%/webapps/{プロジェクト名}/WEB-INF/classes に配置します。設定項目の詳細はWAMプラグインモジュールの設定を参照してください。

      • libフォルダ配下のファイルを %TOMCAT_HOME%/webapps/{プロジェクト名}/WEB-INF/lib に配置します。

      • lib/logフォルダ配下のファイルを %TOMCAT_HOME%/webapps/{プロジェクト名}/WEB-INF/lib に配置します。

      • lib/httpclientフォルダ配下のファイルを %TOMCAT_HOME%/webapps/{プロジェクト名}/WEB-INF/lib に配置します。

tomcat 構成イメージ
%TOMCAT_HOME%
└─webapps
   └─{プロジェクト名}
       └─WEB-INF
           ├─classes
           │      iplass-wam-plugin.xml
           │      (1)
           └─lib
                  iplass-ee-wam-jee-[バージョン].jar などの、iplass-wam-jee-[バージョン].zip/lib 以下の jar ファイル全てを配置
                  logback*.jar などの、iplass-wam-jee-[バージョン].zip/lib/log 以下の jar ファイル全てを配置
                  httpcomponent*.jar などの、iplass-wam-jee-[バージョン].zip/lib/httpclient 以下の jar ファイル全てを配置 (2)
1 必要に応じてログ設定ファイル(logback.xml)を配置
2 lib/httpclientフォルダ配下にはApache HttpClientのjarファイルが格納されています。
対象環境で別のバージョンのHttpClientを利用している等、当該jarを含めない場合は、WAMプラグインモジュールはJava標準ライブラリを使用してHTTP通信を行います。

設定方法/設定例

JavaEE版のWAMプラグインモジュールでは、iplass-wam-plugin.xml を使ってWAMプラグインモジュールの設定を行います。

  • propertyタグのname属性に設定項目名、value属性に値を定義します。

  • WAMプラグインモジュールの基本的な設定は、type属性が WamPluginConfig のcomponentタグで設定します。

  • SSL/TLS設定やプロキシ、タイムアウト時間などHTTP通信に関わる設定は、type属性が HttpComponentConfig のcomponentタグで設定します。

  • 設定項目の詳細はWAMプラグインモジュールの設定を参照してください。

サンプル
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE componentDefinition>
<componentDefinition xmlns="http://wam.iplass.org/plugin/config">
    <component type="org.iplass.wam.plugin.impl.config.WamPluginConfig">
        <property name="siteId" value="local" />
        <property name="siteSecret" value="123" />
        <property name="siteCookiePath" value="/" />
        <property name="siteCookieName" value="ipw" />

        <!-- 管理対象サイトのドメイン/プロトコル -->
        <property name="siteCookieDomain" value="mysite.example.com" />
        <property name="siteScheme" value="https" />

        <!-- WAMモジュールが稼働するiPLAssサーバーのURL -->
        <property name="wamBaseUrl" value="https://my.iplass.jp/myiplassapp/mytenant/" />
        <property name="wamCookieDomain" value="my.iplass.jp" />

        <!-- 認証対象のURLパスパターン. -->
        <property name="protectedPathPattern" value="/mysiteapp/path/pattern.*" />
        <!-- 特定IPを許可します. -->
        <property name="allowedIp" value="10.0.0.1/32" />
        <property name="allowedIp" value="10.0.0.2/32" />
        <property name="allowedIpHeaderName" value="X-Forwarded-For" />


        <!-- 認証処理のコールバックのパス. -->
        <property name="wamAuthCallbackPath" value="/mysiteapp/wamauthcallback" />

        <property name="loadBalancerCookieName" value="myLB" />
        <property name="siteLoadBalancerCookieName" value="wamMyLB" />
        <property name="wamCookieName" value="JSESSIONID" />
        <property name="wamCookiePath" value="/" />
        <property name="csrfTokenCookieName" value="CSRFTOKEN" />
        <property name="charset" value="UTF-8" />


        <!-- Userエンティティをリクエストヘッダーに連携します. -->
        <property name="mapUserAttribute" value="true" />
        <property name="mapType" value="HEADER" />
        <property name="attributeMap" className="org.iplass.wam.plugin.impl.config.AttributeMap">
            <property name="mappedAttributeName" value="x-wam-user-id"/>
            <property name="userAttributeName" value="accountId"/>
        </property>
        <property name="attributeMap" className="org.iplass.wam.plugin.impl.config.AttributeMap">
            <property name="mappedAttributeName" value="x-wam-user-name"/>
            <property name="userAttributeName" value="name"/>
        </property>
    </component>

    <component type="org.iplass.wam.plugin.impl.config.HttpComponentConfig">
        <property name="connectionTimeout" value="300000" />
        <property name="soTimeout" value="300000" />
        <property name="poolSize" value="15" />

        <!-- HTTP Proxy -->
        <property name="proxyHost" value="my.proxy.host"/>
        <property name="proxyPort" value="8080"/>
        <property name="noProxyHost" value="localhost"/>
        <property name="noProxyHost" value="127.0.0.1"/>

        <!-- SSL -->
        <property name="sslCertificateValidation" value="True" />

    </component>
</componentDefinition>
MapUserAttributeについて
データの受領先をHTTPヘッダかリクエスト属性から選択可能です。 プラグインモジュールの設定ファイルで以下のように指定します。
- アプリケーションからHTTPリクエストヘッダーで参照したい場合
<property name="mapType" value="HEADER" />
- リクエスト属性から参照したい場合
<property name="mapType" value="REQUEST" />

1.6. Serverless(JavaScript)版

Fetch APIに対応したJavaScriptランタイムが提供されるサーバーレスなエッジ環境で動作するWAMプラグインモジュール実装です。
Node.js 22以上、Deno、Workerなど様々なJavaScriptランタイムで動作します。

WAMプラグインモジュールの実装は、JavaScriptライブラリとして提供します。
また、WAMプラグインとしてサーバーレス環境で実行可能なコードを実装/ビルドするための unjs/h3 (HTTP フレームワーク)をベースとしたTypeScriptのスケルトンプロジェクトを提供します。

標準で、以下のサーバーレス環境用のスケルトンプロジェクトを提供します。

  • AWS Lambda@Edge版

  • Cloudflare Workers版

  • Netlify Edge Functions版

初期設定

  1. 事前準備/前提

    • 開発端末にNode.jsがインストールされていない場合、Node.jsのインストールが必要です。

    • 有償版のSDKに同梱されているServerless版スケルトンプロジェクトの内、利用したいサーバーレス環境のスケルトンプロジェクトのフォルダ(例 : iplass-wam-lambdaedge-plugin)を開発端末にコピーしてください。

  2. WAMプラグインの実装/ビルド/配置

    • スケルトンプロジェクトをコピーしたディレクトリで、 npm install コマンドを実行し、依存するJavaScriptライブラリをダウンロードします。

    • スケルトンプロジェクトの src/config.ts 内の defineConfig関数 を実装し、WAMプラグインモジュールの設定を行います。設定項目の詳細はWAMプラグインモジュールの設定を参照してください。

    • 必要に応じて、WAMプラグインモジュールのロジックのカスタマイズ処理やフック処理、その他必要なロジックを実装します。詳細はスケルトンプロジェクト内の README.md を参照してください。

    • ビルド方法やデプロイ方法の詳細は、スケルトンプロジェクト内の README.md を参照してください。

設定方法/設定例

Serverless(JavaScript)版のWAMプラグインモジュールでは、スケルトンプロジェクトの src/config.ts 内の defineConfig関数 を実装することでWAMプラグインモジュールの設定を行います。

サンプル
export default defineConfig(() => ({
  // iPLAssサーバー側(=WAM本体)のURL
  wamBaseUrl: "https://my.iplass.jp/myiplassapp/mytenant/",

  // iPLAssサーバー側(=WAM本体)からのコールバックを受け取るURLパス
  wamAuthCallbackPath: "/wamauthcallback",

  // 管理対象サイトID
  siteId: "local",

  // 管理対象サイトSecret
  siteSecret: "123",

  // 管理対象サイト側で権限チェックを行う(WAMで保護する)パターンを示す正規表現
  protectedPattern: [{ domain: "mysite.example.com", pathPattern: /^\/protect\/.*$/ },],

  // 許可対象のIPが含まれるかどうかチェックするリクエストヘッダー名
  allowedIpHeaderName: "True-Client-IP",

  // 500エラー画面URL
  systemErrorPageUrl: "/error/500.html",

  // 503エラー画面URL
  unavailableErrorPageUrl: "/error/503.html",

  // 403エラー画面URL
  forbiddenErrorPageUrl: "/error/403.html",

  // エラー発生時のデフォルトのリダイレクト先URL
  defaultErrorRedirectUrl: "/error/default.html",

  // 4.0.0以降のバージョンではdebugが廃止され、logLevelが追加されました
  // ログレベル
  logLevel: "error",

  // ヘッダーにiPLAssのユーザー情報を格納するかの判定フラグ
  mapUserAttribute: false,

  // ヘッダーにiPLAssのユーザー情報を格納する場合に利用する
  attributeMap: [
    { headerName: "x-wam-user-id", userAttributeName: "accountId" }
  ],

  // クライアントIPを許可APIのリクエストに含めるか
  includeClientIpToPermissionRequest: true
}));