LDAP Managerを使ってみた！ 4. 利用者プロファイルメンテナンス編

[前回](https://qiita.com/ahra_/items/d48c38e15ab7de2e6705)の続きです。
## 利用者プロファイルメンテナンスとは
**ユーザ自身が**パスワードやメールアドレスなどを更新できるWebアプリケーションおよびWebアプリケーションからの更新情報をLDAPサーバに反映するプラグインです。
LDAPフィルタでのアクセス制御や属性のマッピングが可能です。
## 事前準備
### 属性の追加
利用者プロファイルメンテナンスでは、「パスワード有効期限属性」が必須となります。
また、「追加グループ」の設定により、追加した入力項目の数だけ属性が必要になるため、それを整備します。
以下のような`.ldif`ファイルを作成し、パスワード有効期限属性`passwordExpirationTime`と追加グループ用の属性をオブジェクトクラス`exgPerson`に追加します。
``` 
dn: cn={1}esdssystem,cn=schema,cn=config
changetype: modify
add: olcAttributeTypes
olcAttributeTypes: {5}( 2.16.840.1.113730.3.1.91 NAME 'passwordExpirationTime' EQUALITY generalizedTimeMatch SYNTAX 1.3.6.1.4.1.1466.115.121.1.24 )
-
add: olcAttributeTypes
olcAttributeTypes: {6}( 1.3.6.1.4.1.*****.1.5002 NAME 'exgMailAddress1' SUP mail )
-
add: olcAttributeTypes
olcAttributeTypes: {7}( 1.3.6.1.4.1.*****.1.5003 NAME 'exgMailAddress2' SUP mail )
-
add: olcAttributeTypes
olcAttributeTypes: {8}( 1.3.6.1.4.1.*****.1.5004 NAME 'exgMailAddress3' SUP mail )
-
add: olcAttributeTypes
olcAttributeTypes: {9}( 1.3.6.1.4.1.*****.1.5005 NAME 'exgMailAddress4' SUP mail )
-
add: olcAttributeTypes
olcAttributeTypes: {10}( 1.3.6.1.4.1.*****.1.5006 NAME 'exgMailAddress5' SUP mail )
-
add: olcAttributeTypes
olcAttributeTypes: {11}( 1.3.6.1.4.1.*****.1.5007 NAME 'exgMailAddress6' SUP mail )
-
add: olcAttributeTypes
olcAttributeTypes: {12}( 1.3.6.1.4.1.*****.1.5008 NAME 'exgMailAddress7' SUP mail )
-
add: olcAttributeTypes
olcAttributeTypes: {13}( 1.3.6.1.4.1.*****.1.5009 NAME 'exgMailAddress8' SUP mail )
-
add: olcAttributeTypes
olcAttributeTypes: {14}( 1.3.6.1.4.1.*****.1.5010 NAME 'exgMailAddress9' SUP mail )
-
delete: olcObjectClasses
olcObjectClasses: {1}
-
add: olcObjectClasses
olcObjectClasses: {1}( 1.3.6.1.4.2 NAME 'exgPerson' SUP top AUXILIARY MUST ( cn $ objectclass ) MAY ( exgUserPassword $ exgEnabledFlag $ exgOldContainer $ exgPasswdInfo $ passwordExpirationTime $ exgMailAddress1 $ exgMailAddress2 $ exgMailAddress3 $ exgMailAddress4 $ exgMailAddress5 $ exgMailAddress6 $ exgMailAddress7 $ exgMailAddress8 $ exgMailAddress9 ))
```
設定後、以下のような`.ldif`ファイルを用意するなどして、既存のユーザにパスワード有効期限属性を追加します。
```
dn: cn=user1,ou=users,dc=itdo,dc=example,dc=com
changetype: modify
add: passwordExpirationTime
passwordExpirationTime: 30241213120000Z
``` 
また、LDAP Managerにて、追加した属性を使用できるようにインポートします。
![pic (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ff4ec56d-30a1-f05b-ccb3-c044760756fa.png)
### Webアプリケーションのデプロイ・初期設定
`UserProfileMaintenance\webmtn`および`wmconf`フォルダを`<tomcat_home>\webapps`以下にコピーします。
![pic (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/c31fc7ce-8eec-26d6-c9bc-3ab34fa31eea.png)
`<tomcat_home>\webapps\wmconf\WEB-INF\classes\wmconf.xml`を編集して保存します。
``` wmconf.xml
<!--#webmtnインストールフォルダの絶対パス-->
<entry key="EditFile">(<tomcat_home>\webapps\webmtn の絶対パス \ は \\ と記述する)</entry>
<!--# LDAP Manager のホスト名またはIPアドレス-->
<entry key="Hostname">(LDAP Manager ホスト名)</entry>
<!--# LDAP Manager のポート番号-->
<entry key="Port">(LDAP Manager リモートポート)</entry>
</properties>
```
設定例
![pic (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/16ab4e48-af2b-4e36-31a4-7c5edfb78bb8.png)
保存したら、Tomcatを再起動します。
### プラグイン側の設定
LDAP Manager コンソールから「環境設定」 > 「利用者プロファイルメンテナンス1」を選択します。
ここでは、対象ディレクトリのみの指定でも問題ありません。
Webアプリケーション側にて更新する属性とLDAP属性のマッピングを行うため、ここでの追加のマッピング設定は必須ではありません。
![pic (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ee790322-8a53-f1c1-8ba5-e8a59af1234f.png)
## Webアプリケーションの設定（プロファイルメンテナンス除く）
### 設定
Tomcatを起動、`http://(ホスト名):(ポート番号)/wmconf/login/LoginAction.do`にアクセスし、LDAP Managerのリモートユーザでログインします。
![pic (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/73e2b551-58f6-eb6f-6326-0401715d54af.png)
ログイン後、次の画面に遷移します。
多言語設定は「利用しない」とします。
![pic (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/50f09be1-fe21-bdaf-abfa-94e076742599.png)
「システム情報」では「利用者プロファイルメンテナンス」システムの各設定を行います。
システムを「稼働」とし、システムID欄には「LDAP Manager用」のシステムIDを設定します。
パスワード有効期限属性には[追加](#属性の追加)した属性を指定し、期限切れの際にはログインできなくなるようにしました。
Top画面、パスワードメンテを有効とし、一旦プロファイルメンテは無効とします。ログイン後、Top画面が表示されるようにします。
ログイン者情報表示の部分には以下の通り設定し、LDAP属性`cn`が「ユーザ名: `cn`」のように埋め込まれるようにしました。
```
"<font color='#fffff'>ユーザ名: </font><font color='#e4007f'><b>" + cn + "</b></font>"
```
LDAPアドレス帳を有効にし、以下のURLを記載することで`ou=users,dc=itdo,dc=example,dc=com`以下のユーザを検索できるようにしました。
```
ldap://192.168.181.41/ou=users,dc=itdo,dc=example,dc=com??sub?(objectclass=exgPerson)
```
また、外部メニューとして管理者メンテナンスを指定しました。
![pic (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/5cc14c7a-a325-4444-7550-db1d09fc7c19.png)
変更できたら画面下部「SAVE」を押下して保存します。
このSAVE動作は今後1つの画面ごとに行います。
LDAPサーバ情報、LDAP Manager情報の設定ではそれぞれの接続情報を設定します。
![pic (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/91188613-8282-7329-d81a-620afe6bac36.png)
![pic (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/9dee1680-fa0d-aa38-4373-dce44da12ac5.png)
LDAPログイン情報では、利用者プロファイルメンテナンスのユーザ側ログイン画面の各タイトルや表示と、ログインに使用するIDの属性を指定します。
ここでは仮に、ページタイトルを「Login - 検証用」とします。
![pic (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/fcbecccb-824a-74fc-effb-6130bd785b6e.png)
Top画面情報では、「情報タイトル」と「情報本文」に以下のようなテキストファイルの絶対パスを指定し、テキストファイルの内容が画面上に表示されるようにしました。
``` C:\temp\top.txt
<font size="5"><i>
  <font color="#FFC120">
    <center>Information</center>
</i></font>
```
``` C:\temp\topinfo.txt
<font size="3"><sub>
  <font color="#000000">
    <center>ようこそ！</center>
</sub></font>
```
![pic (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/90679681-4f46-3fbe-afba-d7a477eb65ef.png)
LDAPパスワード情報では、パスワードメンテナンス画面のタイトルと設定するパスワードのチェック、入力方法、パスワード以外で表示する項目について設定します。
![pic (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/34ec630b-ded4-b4dd-0568-e72b4e83c8f4.png)
`cn`の文字列を含む場合エラーとするように設定しました。
また、氏名=`sn givenName`と`uid`を表示するようにしました。
![pic (13).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/6fe28bee-5400-2ec9-015e-13ed2182238a.png)
プロファイルメンテナンス情報の設定は後ほど行います。
カラーテーマはGreenにしました。
![pic (14).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/62cb1c03-1cb6-370d-07aa-712d2854387c.png)
これらの設定を行ったら、**必ずFILE SAVEのボタンを押下**してメモリ上の設定を設定ファイルに書き込む必要があります。
![pic (15).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/7a29ca56-e963-6a30-ea05-215e51aed11f.png)
### 確認
`http://(ホスト名):(ポート)/webmtn/webMtnLogin.jsp`にアクセスします。
ページタイトルが「Login - 検証用」となっていることがわかります。
メンテナンスしたいLDAPユーザでログインします。
![pic (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/60ae62f5-c346-3965-4341-5b81694ef26d.png)
ログインすると、Top画面に遷移します。
設定どおり、*Information*というタイトルで"ようこそ！"という本文を持つ情報が掲載され、ログイン者情報として「ユーザ名: **user1**」と表示されています。
左メニューには「LDAPパスワード - 検証用」「LDAPアドレス帳」「管理者メンテナンス」と設定どおりの項目が見えています。ユーザープロファイルメンテナンスは有効化していないため、まだここにはありません。
![pic (17).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/41a0bd0d-b5f3-df8e-e01d-97a6ce7c02f7.png)
LDAPパスワード - 検証用を選択します。
次の画面に遷移します。設定どおり、氏名=`sn givenName`と`uid`が表示されています。
ここで`user1aaa`というパスワードを設定してみます。
![pic (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/fe2940fa-5c00-7812-2a29-cf891bd17715.png)
こちらも設定どおり、`cn`の値を含むパスワードなのでエラーとなります。
![pic (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/795151f3-6294-b8d0-6dc6-71fdd0ef2534.png)
その他のパスワードであれば設定可能です。
![pic (20).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/bf9a059c-a3e0-07c9-9745-58255cf972af.png)
![pic (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/3a4ac3ed-7e8e-1c04-ceca-bbf6e713ba7b.png)
![pic (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/5f5dd606-3b6a-60d6-da06-601855489384.png)
次に、LDAPアドレス帳を選択すると、標準のアドレス帳が起動します。
設定どおり`ou=users,dc=itdo,dc=example,dc=com`以下のユーザエントリを確認できます。
![pic (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/efbd7303-20ad-2d7e-5588-69a0cdbddbdb.png)
外部メニューの管理者メンテナンスを選択すると、設定どおり管理者メンテナンスのログイン画面に遷移します。
![pic (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/50ae9a86-7982-47b2-932d-5315d4d706d7.png)
## プロファイルメンテナンスの設定
### 設定
まず、プロファイルメンテナンス有効フラグを「有効」とします。
![pic (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/50ead5b4-bcec-2509-a814-4ba7bbe78aa4.png)
次に、プロファイルメンテナンス情報にて、追加実施最大数に9を、LDAP属性名添え字桁数を1に設定します。
これにより、今回用意した`exgMailAddress1～9`属性の範囲で追加グループの属性を使用できるようになります。
また、ページ情報からプロファイルメンテナンスを「有効」とします。
![pic (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/37a8571a-806b-34d7-0dc8-18a734c6659b.png)
タブの内部から設定します。タブを有効化、表示名として任意の名称を設定し、表示項目の番号1を選択して表示項目の設定に移ります。
![pic (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/e4a6de77-62c7-ffe9-db5b-95bdd4b22e1b.png)
ここで、表示あるいは編集の対象とする項目について設定します。
英語姓=`sn`について設定しました。
![pic (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/95ead6e0-9908-7cc7-8dd7-108d2c7d6b2e.png)
![pic (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/bc7343b3-8669-fc8b-8bc1-39e83e902f26.png)
パスワード=`userPassword`など、必要な項目を追加します。
![pic (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/cb44c4ef-ae70-c842-e112-63c004556852.png)
追加グループ用の項目も追加します。
サフィックスとなっている数字部分を除いた属性名を項目属性名に指定した項目を作成します。
![pic (31).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/b833bffa-7197-9814-7e56-bb0a6156ad98.png)
次に、項目タイプに「追加ボタン」を選択し、追加項目に先ほど作成した項目を指定した項目を作成します。
![pic (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/747c6f22-3551-944d-7e45-114ae08a5958.png)
このタブの表示項目はこのようになりました。
![pic (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f56de26b-8112-11e5-b619-cade0a70860b.png)
タブに表示グループを追加します。（必須の設定ではありません）
![pic (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/1657456e-f94a-fb8d-78b3-d6d0f0c0352f.png)
最後に、表示レイアウトの設定を行います。
タブ内で各項目をどのグループに、どの位置に配置するかここで決定します。
![pic (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ecb76d28-0d21-abe7-532d-8e443ad6f666.png)
### 確認
ここまでの設定内容を確認します。
メンテナンスしたいユーザでログインします。
左側メニューにプロファイルメンテナンスが追加されています。
![pic (36).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f276d0df-2b68-05e7-b278-ae9ceec213e5.png)
選択すると、次の画面に遷移します。
設定の通り、表示グループ「姓名」の左に表示名: 英語姓、接頭辞に`sn=`、説明欄に「英語姓を入力します」と書かれた`sn`の値が既に入力されているテキストボックスが存在し、表示グループ「パスワード」が閉じた状態で表示され、検証用の追加ボタンが表示グループ外に存在しています。
それぞれ設定どおりに動作しているため、例えば追加ボタンは9個追加した時点で追加上限を迎えるようになっています。
![pic (37).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f8598837-81fa-5f6a-fa6e-ef8088802910.png)
属性の追加も正常に行えています。
![pic (38).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/16174577-d7ed-3062-1a4d-19ffc45d43f5.png)
![pic (39).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/2053cf36-9ad4-db21-489b-941c80b710d0.png)
![pic (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/dd1d838f-be18-a050-0128-097de881ad80.png)
### さらなる設定
タブを追加します。
![pic (41).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/39fba66f-5d39-94ef-c252-f88527f8c91a.png)
![pic (42).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/eddec0d2-6467-4146-bb31-737d41dd869f.png)
![pic (43).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/8af1348e-d76d-8ba9-2359-84ab44bae887.png)
LDAPフィルタに`(cn=user1)`を設定します。これで、タブを見ることができるユーザはuser1のみになります。
またグループを追加し、表示グループ区切りを「線」とします。
![pic (44).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/e58cc87f-71da-70a9-2d3c-03344c82d6b4.png)
![pic (45).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/d494430e-cf2a-a62a-fbff-014659a291fe.png)
![pic (46).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/b6e6f007-8c27-629d-5132-7e9b619e3880.png)
![pic (47).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/349f0026-e43b-90f9-97db-1198fe8b7167.png)
### さらなる設定の確認
まずはuser1ユーザでログインします。
![pic (48).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/077be304-e39a-fd00-ab57-09f9e8a57485.png)
すると、「プロファイルメンテナンス」ページに「追加のタブ」が設定されていることわかります。
また、各項目も設定の通りになっていることがわかります。
![pic (49).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/a0841926-15cf-8771-329e-49ed7651ea39.png)
追加した項目を更新すると、LDAPエントリも正常に更新できます。
![pic (50).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/69784f87-95a7-09d0-07c6-966f1d1566ad.png)
![pic (51).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/530be6e6-cd93-667d-0600-cc929b521ce6.png)
次に、user2ユーザでログインします。
すると、「検証用ページ」が左側メニューに追加されていることがわかります。
![pic (52).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/3bba9d3f-ce79-f99e-838d-0afdf7cabb99.png)
![pic (53).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/a9a7feaa-81e6-676b-06ce-a9461773adc0.png)
「プロファイルメンテナンス」ページには「追加のタブ」が存在しません。
![pic (54).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/42bff028-8f05-bceb-380a-e31532643c81.png)
このようにして、LDAPフィルタを使ったアクセス制限が可能です。
## パスワード有効期限切れの確認
「LDAPパスワード情報」にて拡張パスワード属性を設定します。
![pic (55).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/e6314ca0-b41e-49df-510f-da17403340a1.png)
ユーザのパスワード有効期限切れ属性を過去の日時に設定します。
![pic (56).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/3a159816-2cfa-9b4a-5696-8b0f551f31c5.png)
この状態でログインを試行すると、設定どおり拒否されます。
![pic (57).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/9aaa164b-44db-c261-9239-e0382a3679d0.png)
「LDAPパスワード有効期限切れフラグ」を「パスワード変更のみ許可」とします。
![pic (58).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/645874ee-fe03-8ef3-e44b-f9c545d70896.png)
これでログインすると、次は「LDAPパスワード - 検証用」のみが表示されるようになります。
![pic (59).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/91095ba5-7fa2-536d-0702-5efc533eda00.png)
このようにして、パスワード有効期限属性を使用することができます。
## まとめ
利用者プロファイルメンテナンスの各機能についてのご紹介でした。今回は検証していませんが、利用者プロファイルメンテナンスにも入力補助を行う機能、マッピング機能があります。
[次の記事](https://qiita.com/ahra_/items/a6934e864b01a12d102f)では、LDAP ManagerのActive Directory連携機能を検証します。