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版

初期設定

  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システムライブラリを参照してください。

設定方法/設定例

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

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にビルトインされているため特に何か作業をする必要はありません。

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
}));