コンシューマ向けサイトの会員をiPLAss上で管理する機能として、WAM(Web Account Manager)機能を提供します。
WAM機能は、WAMモジュール
、 WAMプラグインモジュール
の2つのモジュールから構成されます。
- WAMモジュール
-
iPLAss framework上で動作し、会員管理を行うモジュールです。会員管理機能として、認証機能、アカウント情報のセルフメンテナンス機能、コンテンツの閲覧権限チェック機能などを提供します。
- WAMプラグインモジュール
-
HTTPサーバー上で動作し、サイトコンテンツへのアクセスをフックして閲覧制御を行うモジュールです。WAMモジュールとHTTP連携し、未ログインユーザーのログイン画面へのリダイレクト、閲覧権限に応じたコンテンツアクセス制御などを行います。
Apache HTTP Server
、IIS
、JavaEE Server
、Serverless(JavaScript)
で動作するプラグインモジュールを標準で提供します。
1. WAMモジュール
iPLAss framework上で動作し、会員管理を行うモジュールです。会員管理機能として、認証機能、アカウント情報のセルフメンテナンス機能、コンテンツの閲覧権限チェック機能などを提供します。
1.1. 認証機能
コンシューマ向けサイトの会員認証を行います。 認証機能として、ID・パスワード認証、RememberMe機能、2段階認証、ソーシャルログインを提供します。
-
ID・パスワード認証
mtp.auth.User
エンティティとして管理するユーザー情報に対して、ID・パスワードで認証を行う機能を提供します。
認証済みのセッション情報をCookieに格納し、一度認証すれば、2回目以降はユーザーIDとパスワードを入力しなくても直接サイトコンテンツへアクセスできるようになります。 -
RememberMe機能
ログイン後、一定期間の間、認証情報の入力を省略するRemember Me機能を提供します。
詳細はRemember Meを参照してください。 -
2段階認証
メールやSMSによるワンタイムコードによる認証、2段階認証アプリ(Google Authenticator等)による認証、あらかじめ設定した質問に対する答えでの認証、 X509規格に基づいたクライアント証明書での認証機能を提供します。
詳細は2段階認証を参照してください。 -
ソーシャルログイン(ID連携)
ログインするアカウントとして、iPLAss上で管理するユーザーではなく、SNSアカウントを利用する事ができます。 連携先として以下のSNSサービスが利用できます。-
Facebook
管理コンソールに設定する事でFacebookユーザーでのログインが可能となります。
利用する場合はFacebookの設定が必要になります。 -
X(Twitter)
管理コンソールに設定する事でX(Twitter)ユーザーでのログインが可能となります。
利用する場合はX(Twitter)の設定が必要になります。 -
OpenID Connect準拠のサイト(Google、Yahoo!等)
管理コンソールに設定する事でGoogle、Yahoo!などOpenID Connect準拠のサイトのユーザーでのログインが可能となります。
利用する場合はGoogleまたはYahoo!もしくは汎用OpenID Providerの設定が必要になります。 -
SAML
管理コンソールに設定する事でSAML準拠のIdPのユーザーでのログインが可能となります。
利用する場合はSAMLの設定が必要になります。
-
1.2. セルフレジストレーション(およびアクティベーション)
新規ユーザー登録機能、およびメールアドレスのアクティベーション機能を提供します。ユーザー登録時のメールアドレスに対して、アクティベーションURLを通知します。アクティベーションURL押下時に起動画面にてパスワード設定後、ログイン可能となります。
PreferenceのsignUpを参照し、各項目を設定してください。
1.3. セルフメンテナンス
登録したユーザー情報をユーザー自らがメンテナンスする機能を提供します。また、メールアドレスを変更した場合、変更後のメールアドレスへアクティベーション用のURLを通知します。
Preferenceのsettingsを参照し、各項目を設定してください。
1.4. パスワードリカバリ
ユーザーがパスワードを忘れた際に、事前に設定されている秘密の質問へ回答することにより、ユーザーのメールアドレス宛にパスワードリセットURLを通知します。
Preferenceのrecoveryを参照し、各項目を設定してください。
1.5. WAMモジュールの設定
service-config
WAMモジュールを有効化するには、WamServiceが設定された wam-service-config.xml
をincludeする必要があります。
設定方法については初期設定を参照してください。
Preference
WAMモジュールの設定にはPreference機能を利用します。
以下はデフォルトで提供しているWAMのPreferenceです。必要に応じて設定内容を変更してください。
WAM全般の設定です。
org.iplass.wam.api.WamPreference
項目 | 説明 | 初期値 |
---|---|---|
wamUserIdentifierRole |
WAMユーザーを識別するためのロール |
WAM |
homeUrl |
認証後にリダイレクトされる画面のURL。 |
https://[your_apps_home_page_fqdn]/ |
customCssPath |
独自のCSSを組み込みたい場合に指定します。
パスの先頭に |
|
faviconPath |
faviconを設定したい場合に指定します。
パスの先頭に |
|
accountPolicy |
サインアップ設定の |
WAM |
signUp |
signUp参照 |
|
settings |
settings参照 |
|
verification |
||
recovery |
recovery参照 |
|
manageSite |
||
idProvider |
||
idProvider |
||
idProvider |
||
idProvider |
サインアップ時の設定です。
項目 | 説明 | 初期値 |
---|---|---|
accountIdProperty |
ユーザーIDを直接入力させず、それ以外の項目をユーザーIDとして利用する場合に指定します。 例えば、メールアドレス(mail)のようなユーザーに対して一意となる項目を指定します。 |
|
listener |
アクティベーション完了時に実行するリスナー。
|
|
initialGroup |
初期設定するグループのコード、複数指定可能。 |
WAM |
activatedGroup |
アクティベーション後に設定するグループのコード、複数指定可能。 |
|
initialAccountPolicy |
初期設定するアカウントポリシー(認証ポリシー) |
|
activatedAccountPolicy |
アクティベーション後に設定するアカウントポリシー(認証ポリシー) |
|
captcha |
|
|
signUpLayoutName |
登録時に利用する |
signUpLayout |
activateByOutOfBandVerification |
メール等を利用した本人確認を実施するかを指定します。 |
true |
authenticationPolicyWithoutTwoStepVerification |
2段階認証の有効化/無効化(2段階認証ポリシーの切り替え)で利用する認証ポリシー(2段階認証が設定されていない認証ポリシー) |
|
authenticationPolicyWithTwoStepVerification |
2段階認証の有効化/無効化(2段階認証ポリシーの切り替え)で利用する認証ポリシー(2段階認証が設定されている認証ポリシー) |
セルフメンテナンスで利用する設定です。
項目 | 説明 | 初期値 |
---|---|---|
settingsLayoutName |
個人情報の編集時に利用する |
|
showAuthApplication |
セルフメンテナンス画面にアプリケーション情報を表示するかを指定します。 |
true |
showRememberMe |
セルフメンテナンス画面に自動ログイン情報を表示するかを指定します。 |
true |
メール、SMSなどのユーザーの本人確認(アクティベーション)に利用する項目に関する設定です。
項目 | 説明 | 初期値 |
---|---|---|
type |
verification方式を一意に識別するための名称 |
|
propertyName |
検証に利用する |
|
verifier |
アクティベーション処理時に利用するOutOfBandVerifierのverifier名 |
|
validDurationMinute |
検証処理の有効期間(分) |
1440 |
maxFailureCount |
検証処理の最大失敗許容回数。-1を指定した場合はvalidDurationMinute間であれば何度でも失敗可能となります。 |
-1 |
パスワードリカバリに関する設定です。
項目 | 説明 | 初期値 |
---|---|---|
propertyForSecretQuestion |
パスワードリカバリで使用する秘密の質問となるプロパティ名。 複数指定可能。 |
lastName |
propertyForSecretQuestion |
同上 |
firstName |
propertyForSecretQuestion |
同上 |
管理対象サイトの設定です。サイト毎に設定します。
項目 | 説明 | 初期値 |
---|---|---|
siteId |
管理対象サイトを識別するIDを設定します。 WAMプラグインモジュールに設定したものと同じ文字列を設定します。 |
local |
siteSecret |
管理対象サイトのシークレットキーを設定します。 WAMプラグインモジュールに設定したものと同じ文字列を設定します。 |
123 |
siteDomain |
管理対象サイトのドメイン名を設定します。 |
[homeUrlDomain] |
httpsOnly |
接続可能なプロトコルをhttpsのみに設定します。 |
false |
mappingActionPath |
管理対象サイトのコンテンツ閲覧権限チェックに利用されるiPLAssのAction権限設定で、Action名と管理対象サイトのコンテンツのURLパスをマッピングする際にAction名のprefixとして利用される文字列を設定します。 |
local |
userInfoSupplier |
|
|
publicUserProperty |
ユーザー情報取得WebApiで返却するユーザー情報に含まれる |
|
authCallbackUrl |
WAM機能の認証フローにおいて、ログイン完了後にiPLAssから管理対象サイトへリダイレクトする際に使用されるURLです。 当該URLは、サイトコンテンツのURLに該当しない任意のURLを設定してください。 形式は以下の通りです。 http[s]://<サイトのドメイン名>/<任意のパス> WAMプラグインモジュールにおける設定と異なり、URL全体(http[s]~)を記述する点に注意してください。 |
http://[homeUrlDomain]/wamauthcallback |
Facebookのアカウントで認証を行う際の設定です。
Facebook側にはリダイレクト先として以下の3つのURLを設定してください。
http(s)://[server]/[appContext]/[tenantName]/wam/auth/idpcb http(s)://[server]/[appContext]/[tenantName]/wam/signup/idpcb/[providerName] http(s)://[server]/[appContext]/[tenantName]/wam/settings/idpcb/[providerName]
org.iplass.wam.auth.idp.facebook.FacebookIdProvider
項目 | 説明 | 初期値 |
---|---|---|
clientId |
アプリで発行されたApp ID |
yourClientId |
clientSecret |
アプリで発行されたApp Secret |
yourClientSecret |
iconUrl |
ログイン画面表示用ラベルにロゴ画像を表示する場合に設定します。設定する値は画像のURLです。 |
- |
buttonLabel |
ログイン画面表示用のラベル |
<span> Facebook</span> |
buttonStyle |
ログイン画面表示用ラベルのスタイル |
color: #3b5998 |
supportSelfRegistration |
ユーザー自らIdProviderとの紐づけ、解除を設定可能とするか否か |
true |
X(Twitter)のアカウントで認証を行う際の設定です。
X(Twitter)側にはCallback先として以下の3つのURLを設定してください。
http(s)://[server]/[appContext]/[tenantName]/wam/auth/idpcb http(s)://[server]/[appContext]/[tenantName]/wam/signup/idpcb/[providerName] http(s)://[server]/[appContext]/[tenantName]/wam/settings/idpcb/[providerName]
org.iplass.wam.auth.idp.twitter.TwitterIdProvider
項目 | 説明 | 初期値 |
---|---|---|
consumerKey |
アプリで発行されたコンシューマキー |
yourConsumerKey |
consumerSecret |
アプリで発行されたコンシューマーシークレット |
yourConsumerSecret |
iconUrl |
ログイン画面表示用ラベルにロゴ画像を表示する場合に設定します。設定する値は画像のURLです。 |
- |
buttonLabel |
ログイン画面表示用のラベル |
<span> Twitter</span> |
buttonStyle |
ログイン画面表示用ラベルのスタイル |
color: #4099FF |
supportSelfRegistration |
ユーザー自らIdProviderとの紐づけ、解除を設定可能とするか否か |
true |
Googleのアカウントで認証を行う際の設定です。
idProvider(Google)の替わりに、 idProvider(汎用OpenID Provider) を利用することを推奨します。認証連携におけるきめ細かな設定が可能です。 |
OpenID Provider側にはリダイレクト先として以下の3つのURLを設定してください。
http(s)://[server]/[appContext]/[tenantName]/wam/auth/idpcb http(s)://[server]/[appContext]/[tenantName]/wam/signup/idpcb/[providerName] http(s)://[server]/[appContext]/[tenantName]/wam/settings/idpcb/[providerName]
org.iplass.wam.auth.idp.openidconnect.OpenIdConnectIdProvider
項目 | 説明 | 初期値 | |
---|---|---|---|
providerName |
プロバイダ名 |
||
authUri |
認証先のURL |
||
tokenUri |
トークンのURL |
||
userInfoUri |
ユーザー情報取得URL |
||
clientId |
アプリで発行されたクライアントID |
yourClientId |
|
clientSecret |
アプリで発行されたクライアントシークレット |
yourClientSecret |
|
iconUrl |
ログイン画面表示用ラベルにロゴ画像を表示する場合に設定します。設定する値は画像のURLです。 |
- |
|
buttonLabel |
ログイン画面表示用のラベル |
<span> Google</span> |
|
buttonStyle |
ログイン画面表示用ラベルのスタイル |
color: #dd4b39 |
|
supportSelfRegistration |
ユーザー自らIdProviderとの紐づけ、解除を設定可能とするか否か |
true |
|
subjectName |
ユーザーのフルネームの属性名 |
name |
|
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
- |
|
propertyName |
|
||
profileAttributeName |
プロバイダ側の属性値(メールアドレス) |
||
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
- |
|
propertyName |
|
firstName |
|
profileAttributeName |
プロバイダ側の属性値(ユーザーの名) |
given_name |
|
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
- |
|
propertyName |
|
lastName |
|
profileAttributeName |
プロバイダ側の属性値(ユーザーの姓) |
family_name |
|
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
- |
|
propertyName |
|
language |
|
profileAttributeName |
プロバイダ側の属性値(ユーザーの優先ロケール) |
locale |
Yahoo!のアカウントで認証を行う際の設定です。
idProvider(Yahoo)の替わりに、 idProvider(汎用OpenID Provider) を利用することを推奨します。認証連携におけるきめ細かな設定が可能です。 |
OpenID Provider側にはリダイレクト先として以下の3つのURLを設定してください。
http(s)://[server]/[appContext]/[tenantName]/wam/auth/idpcb http(s)://[server]/[appContext]/[tenantName]/wam/signup/idpcb/[providerName] http(s)://[server]/[appContext]/[tenantName]/wam/settings/idpcb/[providerName]
org.iplass.wam.auth.idp.openidconnect.OpenIdConnectIdProvider
項目 | 説明 | 初期値 | |
---|---|---|---|
providerName |
プロバイダ名 |
Yahoo! |
|
authUri |
認証先のURL |
||
useNonce |
リプレイアタック対策有無を設定 |
true |
|
tokenUri |
トークンのURL |
||
tokenEndPointAuthType |
トークンエンドポイント認証タイプ固定文字列(初期値から変更不要) |
BASIC |
|
clientId |
アプリで発行されたクライアントID |
yourClientId |
|
clientSecret |
アプリで発行されたクライアントシークレット |
yourClientSecret |
|
userInfoUri |
ユーザー情報取得URL |
||
subjectName |
ユーザーのフルネームの属性名 |
name |
|
iconUrl |
ログイン画面表示用ラベルにロゴ画像を表示する場合に設定します。設定する値は画像のURLです。 |
- |
|
buttonLabel |
ログイン画面表示用のラベル |
<span> Yahoo!</span> |
|
buttonStyle |
ログイン画面表示用ラベルのスタイル |
color: #ff0033 |
|
supportSelfRegistration |
ユーザー自らIdProviderとの紐づけ、解除を設定可能とするか否か |
true |
|
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
- |
|
propertyName |
|
||
profileAttributeName |
プロバイダ側の属性値(メールアドレス) |
||
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
- |
|
propertyName |
|
firstName |
|
profileAttributeName |
プロバイダ側の属性値(ユーザーの名) |
given_name |
|
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
- |
|
propertyName |
|
lastName |
|
profileAttributeName |
プロバイダ側の属性値(ユーザーの姓) |
family_name |
|
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
- |
|
propertyName |
|
language |
|
profileAttributeName |
プロバイダ側の属性値(ユーザーの優先ロケール) |
locale |
OpenID Connect準拠のOpenID Providerのアカウントで認証を行う際の設定です。 認証連携における詳細の設定は OpenIDConnect定義 にて行います。
OpenID Provider側にはリダイレクト先として以下の3つのURLを設定してください。
http(s)://[server]/[appContext]/[tenantName]/wam/auth/idpcb http(s)://[server]/[appContext]/[tenantName]/wam/signup/idpcb/[providerName] http(s)://[server]/[appContext]/[tenantName]/wam/settings/idpcb/[providerName]
org.iplass.wam.auth.idp.oidc.OpenIdConnectIdProvider
項目 | 説明 | 設定例 | |
---|---|---|---|
providerName |
プロバイダ名 |
okta |
|
definitionName |
OpenIDConnect定義の定義名 |
okta |
|
definitionNameResolver |
|
sample.CustomDefinitionNameResolver |
|
iconUrl |
ログイン画面表示用ラベルにロゴ画像を表示する場合に設定します。設定する値は画像のURLです。 |
path/to/icon.png |
|
buttonLabel |
ログイン画面表示用のラベル |
<span>Okta</span> |
|
buttonStyle |
ログイン画面表示用ラベルのスタイル |
color: #007dc1 |
|
supportSelfRegistration |
ユーザー自らIdProviderとの紐づけ、解除を設定可能とするか否か |
true |
|
attributeMapping |
プロバイダ側のプロフィールの属性値と iPLAss上の |
||
propertyName |
|
||
profileAttributeName |
プロバイダ側の属性名を指定 |
SAML準拠のID Providerのアカウントで認証を行う際の設定です。 認証連携における詳細の設定は SAML定義(ServiceProviderの設定) にて行います。
なお、SAMLIdProviderはユーザー自身によるアカウントの紐づけ、解除操作には対応しておりません。事前のプロビジョニング、もしくはAutoUserProvisioningHandlerの仕組みにてJITプロビジョニングする必要があります。
org.iplass.wam.auth.idp.saml.SamlIdProvider
項目 | 説明 | 設定例 | |
---|---|---|---|
providerName |
プロバイダ名 |
okta |
|
definitionName |
SAML定義の定義名 |
okta |
|
definitionNameResolver |
|
sample.CustomDefinitionNameResolver |
|
iconUrl |
ログイン画面表示用ラベルにロゴ画像を表示する場合に設定します。設定する値は画像のURLです。 |
path/to/icon.png |
|
buttonLabel |
ログイン画面表示用のラベル |
<span>Okta</span> |
|
buttonStyle |
ログイン画面表示用ラベルのスタイル |
color: #007dc1 |
1.6. 初期設定
WAMモジュールを利用する際には以下の設定が必要となります。
WAMモジュールの追加
mtp-service-configに以下を追記し、WAMモジュールの設定ファイルを読み込めるようにします。 iplass-ee-skeletonを利用している場合は該当箇所のコメント化を解除します。
<inherits>/wam-service-config.xml</inherits>
build.gradleに以下を追記し、WAMモジュールを実行時の依存関係に追加します。 iplass-ee-skeletonを利用している場合は該当箇所のコメント化を解除します。
runtime group: 'org.iplass.ee', name: 'iplass-ee-wam', version: iPLAssVersion
追記後、プロジェクトのコンテキストメニューから Gradleプロジェクトのリフレッシュ
を行ってください。
アカウントポリシーの追加
WAMを利用してユーザーアカウントを登録する際に適用するアカウントポリシー(認証ポリシー)を作成します。
アカウントポリシーの名前はPreferenceの initialAccountPolicy
で指定した値(デフォルト値 : WAM
)にします。
initialAccountPolicy
として利用するアカウントポリシーでは、次の設定を有効化する必要があります。
Create Account with Specific Password
パスワードリカバリ機能を利用する場合、Preferenceの activatedAccountPolicy
(未指定の場合は initialAccountPolicy
)に設定されているアカウントポリシーでは、次の設定を有効化する必要があります。
Reset Password with Specific Password
権限設定
AdminConsoleのPermissionExplorer等を利用して、WAMを利用するユーザーのための権限設定を行います。
WAMユーザーが登録時に所属するグループを作成します。
グループのコードはPreferenceの signUp > initialGroup
で指定した値(デフォルト値 : WAM
)にします。
WAMユーザー用のロールを作成します。
ロールのコードはPreferenceの wamUserIdentifierRole
で指定した値(デフォルト値 : WAM
)にします。
ロール条件を追加し、前項で作成したグループに所属していることを条件にします。
user.memberOf("WAM")
WAMユーザーがWAMを利用する上で必要となる最低限のEntity権限を設定します。 ここで対象とするEntity以外の権限については、アプリケーションの要件にあわせて適宜設定してください。
Entity | 参照権限 | 登録権限 | 更新権限 | 削除権限 |
---|---|---|---|---|
mtp.auth.Group |
○ |
|||
mtp.auth.Rank |
○ |
|||
mtp.auth.User |
○ |
○ |
WAMユーザーが利用するWAMモジュールのActionに対して権限を設定します。
wam
配下の全てのActionに対して許可を設定するため、PermissionExplorerのActionPermissionにて、WAMユーザー用のロールの列と wam
の階層フォルダが交差するセルをクリックし、Nameに適切な名前を設定してOKボタンを押してください。
画面定義
WAMユーザーが自身の情報を更新するための画面で利用するユーザー情報(mtp.auth.User
)の詳細画面定義(DetailView)を作成してください。
View名はPreferenceの settings > settingsLayoutName
で指定した値にします。
なお、この詳細画面定義(DetailView)ではユーザーに必要以上の項目を編集させないよう注意してください。 例えば、権限に絡む項目(グループ、ランク、アカウントポリシー等)を更新してしまった場合、それ以降WAMの画面が操作できなくなる可能性があります。
管理対象サイト用Action権限
WAM機能では、管理対象サイトのコンテンツ閲覧権限チェックをAction権限を用いて行います。
Action名と管理対象サイトのコンテンツのURLパスをマッピングする際、Preferenceの当該管理対象サイトの manageSite > mappingActionPath
の値がAction名のprefixとして利用されます。
例)下記URLの管理対象サイトのコンテンツの閲覧制御する場合
当該管理対象サイトの manageSite > mappingActionPath
の値が local
だった場合には、以下のAction名としてAction権限がチェックされます。
local/demo/test
Action権限の許可条件の設定において、 parameter
には管理対象サイトのコンテンツ閲覧時のURLのクエリパラメータがバインドされます。
def value = parameter.クエリパラメータのキー
def value = parameter.getValue("クエリパラメータのキー")
request.externalResourceParameter
には org.iplass.wam.siteauth.URIExternalResourceParameter
のインスタンスがバインドされます。
JSON形式の requestInfo
をパラメータに含めてWAMの権限チェックWebApiを呼び出すことで、以下のような許可条件を設定することができます。
また、許可条件で request.externalResourceParameter.responseStatus
に任意の戻り値を指定することで、条件に沿った戻り値が返却されます。
if(request.externalResourceParameter.requestInfo.get("clientIp").equals("xxx.xxx.xxx.xxx")){ request.externalResourceParameter.responseStatus = "IP_ALLOW"; true;}
ユースケースとして、 「特定のURLパス配下(denytest/*
)のコンテンツを、特定のグループ(グループコード : wam_allow
)に所属しているユーザーが閲覧可能にする」 といった制御を行う場合の設定方法を説明します。
-
グループ
グループ(グループコード : wam_allow
)を作成します。
特定のURLパス配下(denytest/*)のコンテンツを参照可能としたいユーザー(サイト会員)を作成したグループに所属させます。
-
ロール
制御用ロール(ロールコード : wamrole
)を作成します。
ロール条件を追加し、前項で作成したグループに所属していることを条件にします。
-
Action権限設定
最後に作成したロールに対するAction権限を設定します。
特定のロール(ロールコード : wamrole
) を持つユーザーに対して、 denytest/*
パスに対するアクセスを許可する設定をしています。
Action名のprefixには、実際のPreferenceの当該管理対象サイトの manageSite > mappingActionPath
の値を設定してください。以下の例では、 local
が設定されている前提です。
ユーザー情報取得WebApi
WAMモジュールでは、ユーザー情報(サイト会員)の取得が可能なWebApi(wam/auth/user
)を標準で提供しています。
サイトID(パラメータ名 : siteid
) 、サイトシークレット(パラメータ名 : sitesecret
) をパラメータに含めてユーザー情報取得WebApiを呼び出すと、Preferenceの当該管理対象サイトの manageSite > publicUserProperty
の設定に基づきユーザー情報を返却します。
ユーザー情報取得WebApiを利用するかつ、クロスオリジンでのWebApi呼び出しとなる場合には、
Admin ConsoleのWebApi画面で wam/auth/user
を開き、 Access-Control-Allow-Credentials
にチェックを入れて Access-Control-Allow-Origin
にサイト側のオリジンを設定する必要があります。
2. WAMプラグインモジュール
HTTPサーバー上で動作し、サイトコンテンツへのアクセスをフックして閲覧制御を行うモジュールです。WAMモジュールとHTTP連携し、未ログインユーザーのログイン画面へのリダイレクト、閲覧権限に応じたコンテンツアクセス制御などを行います。
Apache HTTP Server
、IIS
、JavaEE Server
、 Serverless(JavaScript)
で動作するプラグインモジュールを標準で提供します。
2.1. 処理フロー
WAMプラグインモジュールは、サイトコンテンツへのアクセスをフックし、WAMモジュールとHTTP連携して認証・認可の処理を行います。
以下に Apache
のWAMプラグインモジュール実装における、認証・認可処理の流れとエラー時のステータスコードを示します。Apache
以外の実装も概ね同様のフローで処理が行われます。
認証・認可処理の流れ
-
ユーザーが管理対象サイトのコンテンツにアクセスします。
-
Apacheがコンテンツ生成処理を実行する前に、WAMプラグインモジュールの認証・認可ロジックをフックします。
-
サイトコンテンツ閲覧時のアクセスURLが、設定上、参照制限をかけるパスとして設定されている場合、WAMモジュールに閲覧権限の有無を問い合わせます (WAMモジュールの許可APIへリクエスト)。
-
閲覧権限チェックの問い合わせ結果を返却します。認証済みの場合には、ユーザー情報も併せて返却されます(ユーザー情報の返却有無や返却される情報は、WAMプラグインモジュールの設定に依存します)。
-
認証済みかつ、ユーザー情報が返却された場合、元のHTTPリクエストヘッダにユーザー情報を付加します。
-
閲覧権限チェックの問い合わせ結果に応じて、以下の画面遷移を行います。
-
未認証の場合 : ログインページへリダイレクト
-
認証済みの場合 : 元のリクエストに対するコンテンツを応答
-
認証済みで権限がない場合 : 権限エラーページへリダイレクト
-
その他 : エラーとして、状況に応じたステータスコードをApacheコアモジュールに渡します。通常のコンテンツ処理や後続のApacheモジュール(PHP等)の処理は実行されません。
Figure 2. ログイン画面~コンテンツへのアクセスまで
-
-
ユーザーがログイン画面でID、パスワードを入力します。
-
ログインに成功すると、管理対象サイトのWAMモジュール用URLパス(
manageSite > authCallbackUrl
)へリダイレクトされます。 -
WAMモジュールにアクセストークン( = iPLAss上のセッションID)の払出しをリクエストします(WAMモジュールのトークンAPIへリクエスト)。⑧のリダイレクト時にクエリパラメータにセットされた認可コード、WAMプラグインモジュールに設定した管理対象サイトのサイトID、サイトシークレットがパラメータとしてWAMモジュールに送信されます。
-
WAMモジュールからWAMプラグインモジュールにアクセストークン( = iPLAss上のセッションID)が返却されます。このアクセストークンが管理対象サイト側ドメインのCookieへと格納され、以降、WAMモジュールへの閲覧権限チェックリクエスト時にCookieとして送信するセッションIDとして使用されます。
-
元のコンテンツURLへリダイレクトします。 再度②~⑤の処理が発生しますが、アクセストークン( = iPLAss上のセッションID)がCookieとして送信され、認証済みセッションとして扱われます。
エラー時ステータスコード
WAMモジュールの許可API(permission)、トークンAPI(token)の返却結果によっては、WAMモジュールからApacheにエラーのステータスコードを指示します。
その結果、コンテンツ処理が中断されてエラーページが表示されます。以下、ステータスコード及び想定される状況です。
上記番号 | ステータスコード | 状況 |
---|---|---|
⑥ |
400 |
WAMプラグインモジュールからWAMモジュールの許可APIへ不正な形式でリクエストしています。 |
503 |
WAMモジュールの許可APIから正常な応答を得られていません。iPLAssサーバーやDB、ネットワークの障害等が考えられます。 |
|
⑪ |
403 |
CSRFトークンのチェックに失敗しています。Cookieに異常がないか、サーバーのスティッキーセッションが機能しているか確認してください。 |
503 |
WAMモジュールのトークンAPIから正常な応答を得られていません。iPLAssサーバーやDB、ネットワークの障害等が考えられます。 |
2.2. WAMプラグインモジュールの設定
WAMプラグインモジュールの設定項目の説明です。WAMプラグインモジュールの設定可能項目/設定方法は各実装によって異なります。
Apache版の場合、各設定項目名はパスカル記法となっており、prefixに Iplass が必要です。
|
項目 | 説明 | デフォルト値 | 要変更 | Apache | IIS | JavaEE | Serverless | ||
---|---|---|---|---|---|---|---|---|---|
wamBaseUrl |
WAMモジュールが稼働するiPLAssサーバー側のURLを指定します。WAMプラグインモジュールとWAMモジュール間でHTTP通信する際に使用されます。 形式は以下の通りです。 |
- |
○ |
○ |
○ |
○ |
○ |
||
wamRedirectUrl |
ブラウザからWAMモジュールにリダイレクトする際のベースURLを指定します。 形式は以下の通りです。 |
|
- |
○ |
○ |
○ |
○ |
||
wamCookieName |
iPLAssサーバー上でセッションIDとして使用されるCookie名を指定します。 |
JSESSIONID |
- |
○ |
○ |
○ |
○ |
||
wamCookieDomain |
iPLAssサーバー上でセッションIDとして使用されるCookieのドメインを指定します。 |
- |
○ |
○ |
- |
○ |
- |
||
wamCookiePath |
iPLAssサーバー上でセッションIDとして使用されるCookieが有効なパスを指定します。 |
/ |
- |
○ |
○ |
○ |
- |
||
wamAuthCallbackPath |
WAM機能の認証フローにおいて、ログイン完了後にWAMモジュールから管理対象サイトへリダイレクトする際に使用されるURLです。 当該URLは、サイトコンテンツのURLに該当しない任意のURLを設定してください。 形式は以下の通りです。 |
- |
○ |
○ |
○ |
○ |
○ |
||
siteId |
管理対象サイトを識別するための一意なIDを指定します。 |
- |
○ |
○ |
○ |
○ |
○ |
||
siteSecret |
管理対象サイトのシークレットキーを指定します。 |
- |
○ |
○ |
○ |
○ |
○ |
||
siteCookieName |
アクセストークン( = iPLAss上のセッションID)を管理対象サイト側のドメインにCookieとして発行する際のCookie名を指定します。 |
ipw |
- |
○ |
○ |
○ |
○ |
||
siteCookieDomain |
アクセストークン( = iPLAss上のセッションID)を管理対象サイト側のドメインにCookieとして発行する際のCookieのDomain属性を指定します。 |
- |
○ |
○ |
○ |
○ |
○ |
||
siteCookiePath |
アクセストークン( = iPLAss上のセッションID)を管理対象サイト側のドメインにCookieとして発行する際のCookieの有効パスを指定します。 指定する場合は以下の項目で指定したURLのパターンを包含するようにしてください。
|
- |
- |
○ |
○ |
○ |
○ |
||
siteCookieSameSite |
アクセストークン( = iPLAss上のセッションID)を管理対象サイト側のドメインにCookieとして発行する際のCookieのSameSite属性を指定します。 |
- |
- |
- |
- |
- |
○ |
||
siteScheme |
管理対象サイトのURLスキームを指定します。 |
https |
- |
○ |
○ |
○ |
○ |
||
charset |
WAMモジュール側でのコンテンツ閲覧権限チェック時のパラメータのエンコードやJSONレスポンスのエンコードに使用されます。 |
utf-8 |
- |
○ |
○ |
○ |
○ |
||
csrfTokenCookieName |
一連の認証処理時のCSRF対策用トークンを管理対象サイト側のドメインにCookieとして発行する際のCookie名を指定します。 |
_csrft |
- |
○ |
○ |
○ |
○ |
||
protectedPathPattern |
管理対象サイトのコンテンツについて、閲覧制限をかけるURLのパスパターンを正規表現で指定します。
|
- |
○ |
○ |
○ |
○ |
- |
||
protectedPattern |
管理対象サイトのコンテンツについて、閲覧制限をかけるパターンを Serverless版での設定例
protectedPattern: [ { domain: "mysite.example.com", pathPattern: /^\/contents\/.*$/ }, ], |
- |
○ |
- |
- |
- |
○ |
||
httpComponentProvider |
HTTP通信実装クラスを指定します。 |
各実装の標準HttpComponentProvider |
- |
○ |
○ |
○ |
- |
||
wamVerboseLog |
ログの冗長化を設定する際に利用します。 |
false(Off) |
- |
○ |
○ |
- |
- |
||
mapUserAttribute |
許可APIでコンテンツ閲覧が許可された場合、その後のコンテンツへのリクエスト時のHTTPリクエストヘッダーにユーザー情報をセットする機能を有効化するかを指定します。 |
false(Off) |
- |
○ |
○ |
○ |
○ |
||
attributeMap |
許可APIでコンテンツ閲覧が許可された場合、その後のコンテンツへのリクエスト時のHTTPリクエストヘッダーにユーザー情報をセットする場合に利用します。 リクエストヘッダー名と値として設定する Apache版での設定例
IplassAttributeMap x-wam-user-id accountId |
- |
- |
○ |
○ |
○ |
○ |
||
allowedIp |
WAMの認証・認可処理をスキップできる接続元のIPアドレスを指定します。 |
- |
- |
○ |
○ |
○ |
○ |
||
allowedIpHeaderName |
許可対象のIPアドレスが含まれるかどうかチェックするリクエストヘッダー名を指定します。 |
X-Forwarded-For |
- |
○ |
○ |
○ |
○ |
||
allowedIpHeaderFieldIndex |
|
0 (0で最終要素を指します) |
- |
○ |
○ |
○ |
○ |
||
loadBalancerCookieName |
WAMモジュールが稼働するiPLAssサーバーが冗長化されており、ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookie名を指定します。 |
- |
- |
○ |
○ |
○ |
○ |
||
siteLoadBalancerCookieName |
WAMモジュールが稼働するiPLAssサーバーが冗長化されており、ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookieを管理対象サイト側のドメインのCookieとして格納する際のCookie名を指定します。 例えば、当該項目を |
- |
- |
○ |
○ |
○ |
○ |
||
siteLoadBalancerCookieDomain |
ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookieを管理対象サイト側のドメインのCookieとして格納する際のDomain属性を指定します。 |
- |
- |
- |
- |
- |
○ |
||
siteLoadBalancerCookiePath |
ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookieを管理対象サイト側のドメインのCookieとして格納する際の有効パスを指定します。 |
/ |
- |
- |
- |
- |
○ |
||
siteLoadBalancerCookieDomain |
ロードバランサーのスティッキーセッション機能が有効化されている場合に、スティッキーセッション機能で用いられるCookieを管理対象サイト側のドメインのCookieとして格納する際のSameSite属性を指定します。 |
- |
- |
- |
- |
- |
○ |
||
addScriptTagPathPattern |
WAMの機能により、HTTPレスポンスボディの末尾にscriptタグを追加することができます。 |
- |
○ |
○ |
○ |
○ |
- |
||
javaScriptPath |
|
- |
○ |
○ |
○ |
○ |
- |
||
javaScriptSrc |
|
- |
○ |
○ |
○ |
○ |
- |
||
connectionTimeout |
WAMプラグインモジュールからWAMモジュールへの通信時(HTTP/HTTPS)のコネクションタイムアウト時間を設定します。 |
- |
- |
○ |
○ |
○ |
- |
||
soTimeout |
WAMプラグインモジュールからWAMモジュールへの通信時(HTTP/HTTPS)のソケットタイムアウト時間を設定します。 |
- |
- |
○ |
○ |
○ |
○ |
||
proxyHost |
WAMプラグインモジュールからWAMモジュールへの通信時(HTTP/HTTPS)に利用するプロキシサーバのホスト名を指定します。 |
- |
- |
○ |
○ |
○ |
- |
||
proxyPort |
WAMプラグインモジュールからWAMモジュールへの通信時(HTTP/HTTPS)に利用するプロキシサーバのポート番号を指定します。 |
- |
- |
○ |
○ |
○ |
- |
||
noProxyHost |
プロキシサーバを指定した場合に、プロキシを利用しないホストを指定します。 |
localhost |
- |
○ |
○ |
○ |
- |
||
includeClientIpToPermissionRequest |
接続元IPアドレスをWAMモジュールの許可API呼び出し時にパラメータ(requestInfo)として送信するかをtrue/falseで指定します。 |
false |
- |
- |
- |
- |
○ |
||
clientHeaderToPermissionRequestMapping |
ユーザーのコンテンツ要求時のHTTPリクエストヘッダーを、許可API呼び出し時のパラメータ(requestInfo)としてマッピングする場合の設定です。 Serverless版での設定例
clientHeaderToPermissionRequestMapping: [ { clientHeaderName: "Accept", requestInfoKey: "accept" }, ] |
- |
- |
- |
- |
- |
○ |
||
systemErrorPageUrl |
500エラー発生時に返却するエラー画面のURLです。絶対パスもしくは相対パスで指定可能です。 |
- |
- |
- |
- |
- |
○ |
||
unavailableErrorPageUrl |
503エラー発生時に返却するエラー画面のURLです。絶対パスもしくは相対パスで指定可能です。 |
- |
- |
- |
- |
- |
○ |
||
forbiddenErrorPageUrl |
403エラー発生時に返却するエラー画面のURLです。絶対パスもしくは相対パスで指定可能です。 |
- |
- |
- |
- |
- |
○ |
||
defaultErrorRedirectUrl |
エラー発生時のデフォルトのリダイレクト先URLです。絶対パスもしくは相対パスで指定可能です。 |
- |
- |
- |
- |
- |
○ |
||
IplassIntegrateBasicAuth |
基本認証のID/PWでWAMの認証を行います。認証に成功した場合、そのまま管理対象サイトのコンテンツが表示されます。 |
Off |
- |
○ |
- |
- |
- |
||
IplassUrlEncodeCharset |
WAMプラグインモジュールからWAMモジュールへのHTTP通信の際、クエリパラメータにURLを含むことがあります。 |
utf-8 |
- |
○ |
- |
- |
- |
||
IplassSslVerifyPeer |
WAMモジュールへのHTTP/HTTPS通信時、サーバー証明書の検証するか否かを設定します。 |
On |
- |
○ |
- |
- |
- |
||
IplassSslVerifyHost |
WAMからiPLAssへのHTTP/HTTPS通信時、通信先のドメイン名の検証(証明書のcommonNameの定義と一致しているか)するか否かを設定します。 |
On |
- |
○ |
- |
- |
- |
||
IplassSslVersion |
SSLプロトコルバージョンを指定します。以下から設定可能です。 |
1(TLSv1.x) |
- |
○ |
- |
- |
- |
||
IplassHttpVerbose |
WAMモジュールのHTTP通信のログを冗長化します。 |
Off |
- |
○ |
- |
- |
- |
ロードバランサのスティッキーセッションを利用する WAMモジュールが稼働するiPLAssサーバーを冗長化してロードバランサーのスティッキセッション機能を利用する環境では、 loadBalancerCookieName と siteLoadBalancerCookieName を正しく設定することで、WAMプラグインモジュールが当該Cookieをロードバランサーに送付するようになります。Apache版を例にした場合、以下のような設定では、以下図のようにCookieが交換されます。 |
# ロードバランサのスティッキーセッションのCookie名を指定します. IplassLoadBalancerCookieName myLB # 上記Cookieを管理対象サイト側のドメインのCookieに格納する場合のCookie名を指定します. IplassSiteLoadBalancerCookieName wamMyLB
javaScriptSrc(IplassJavaScriptSrc)/ javaScriptPath(IplassJavaScriptPath)項目について WAMの機能により、WAMプラグインモジュールからのHTTPレスポンスボディの末尾にscriptタグが追加されます。 当該タグの目的は、JavaScriptでユーザー情報を取得し、ユーザー情報毎にコンテンツに変更を加える事に利用できます。 サンプルモジュールが、Apache版の「doc/example/js/iplasswam」にありますので、ご参照ください。 |
ファイル | 説明 | 変更要 |
---|---|---|
iplass-wam.js |
WAMオブジェクトを定義したファイルです。 |
|
site.js |
サイトのサンプルソースです。 |
○ |
site.css |
サイトで利用するcssです。 |
○ |
jQuery-1.11.0.min.js |
site.jsで利用するlibのファイルです。 |
2.3. Apache版
初期設定
-
事前準備/前提
-
有償版のSDKに同梱されている
iplass-ee-wam-apache-[バージョン]-[OS/処理系].[拡張子]
(例 : iplass-ee-wam-apache-[バージョン]-linux-gcc.tar.gz)をWebサーバーの任意のパスに配置してください。 -
以降の説明では、Apacheのインストールディレクトリを
%APACHE_HOME%
と表記します。 -
Apacheをデーモン形式で実行することを前提とします。
-
-
WAMプラグインモジュールの配置
-
Webサーバーの
%APACHE_HOME%/modules
にWAMプラグインモジュールを配置します。iplass-ee-wam-apache-[バージョン]-[OS/処理系].[拡張子]
内の以下のファイルが対象です。-
mod_iplass_ee_wam_apache.so
-
-
-
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
にコピーします。
-
-
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にビルトインされているため特に何か作業をする必要はありません。 |
2.4. IIS版
初期設定
-
事前準備/前提
-
有償版のSDKに同梱されている
iplass-ee-wam-iis-[バージョン].zip
をIISサーバーに配置してください。 -
以降の説明では、IISのインストールディレクトリを
%IIS_HOME%
と表記します。 -
サイトのルートフォルダを
%WWW_ROOT%
と表記します。 -
IISのインストール時の「機能の選択」で
ASP.NET4.5
を選択していることを前提とします。
-
-
WAMプラグインモジュールの配置
-
IISサーバーの
%WWW_ROOT%/bin
にWAMプラグインモジュールを配置します。iplass-wam-iis-[バージョン].zip
内の以下のファイルが対象です。-
DynamicJson.dll
-
IplassEEWamIIS.dll
-
log4net.dll
-
-
-
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>
2.5. JavaEE版
初期設定
-
事前準備/前提
-
有償版のSDKに同梱されている
iplass-ee-wam-jee-[バージョン].zip
をアプリケーションサーバーに配置してください。 -
以降の説明では、Tomcatのインストールディレクトリを
%TOMCAT_HOME%
と表記します。
-
-
WAMプラグインモジュールの配置
-
アプリケーションサーバーの
%TOMCAT_HOME%/webapps/{プロジェクト名}/WEB-INF/lib
にWAMプラグインモジュールを配置します。iplass-wam-jee-[バージョン].zip
内の以下のファイルが対象です。-
iplass-ee-wam-jee-[バージョン].jar
-
-
-
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_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" /> |
2.6. Serverless(JavaScript)版
Fetch APIに対応したJavaScriptランタイムが提供されるサーバーレスなエッジ環境で動作するWAMプラグインモジュール実装です。
Node.js 18以上、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",
// デバッグモード
debug: false,
// ヘッダーにiPLAssのユーザー情報を格納するかの判定フラグ
mapUserAttribute: false,
// ヘッダーにiPLAssのユーザー情報を格納する場合に利用する
attributeMap: [
{ headerName: "x-wam-user-id", userAttributeName: "accountId" }
],
// クライアントIPを許可APIのリクエストに含めるか
includeClientIpToPermissionRequest: true
}));