1. 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版
初期設定
-
事前準備/前提
-
開発端末にNode.jsがインストールされていない場合、Node.jsのインストールが必要です。
-
有償版のSDKに同梱されているServerless版スケルトンプロジェクトの内、利用したいサーバーレス環境のスケルトンプロジェクトのフォルダ(例 :
iplass-wam-lambdaedge-plugin
)を開発端末にコピーしてください。
-
-
WAMプラグインの実装/ビルド/配置
-
スケルトンプロジェクトをコピーしたディレクトリで、
npm install
コマンドを実行し、依存するJavaScriptライブラリをダウンロードします。 -
スケルトンプロジェクトの
src/config.ts
内のdefineConfig関数
を実装し、WAMプラグインモジュールの設定を行います。設定項目の詳細はWAMプラグインモジュールの設定を参照してください。 -
必要に応じて、WAMプラグインモジュールのロジックのカスタマイズ処理やフック処理、その他必要なロジックを実装します。詳細はスケルトンプロジェクト内の
README.md
を参照してください。 -
ビルド方法やデプロイ方法の詳細は、スケルトンプロジェクト内の
README.md
を参照してください。
-
設定方法/設定例
Serverless(JavaScript)版のWAMプラグインモジュールでは、スケルトンプロジェクトの src/config.ts
内の defineConfig関数
を実装することでWAMプラグインモジュールの設定を行います。
-
設定項目の詳細は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
}));