API ConnectでLDAPを使ってみた

# 前提バージョン
IBM API Connect 5.0.6.3
Ubuntu 14.04LTS
※当記事ではVMware Workstation PlayerでAPI Connect, UbuntuがPC上に導入済みとします。

#1 API Connect の認証について
API Connect では、APIの保護機能の基本機能として
①APIキー
②OAuth2.0
③基本認証
を提供します（他にもさまざまな保護機能があります）。

上記②や③ではほとんどの場合、API保護のためにユーザー認証処理を行うことになりますが、API Connect は基本的に外部の認証サーバーを用いて認証する必要があります。

この記事では、いくつかある認証方式のうちLDAP サーバーを用いた認証について紹介します。
（今回はAPI保護の設定は「③基本認証」で行います。「②OAuth2.0」のパターンでもLDAPで認証することは可能です）

##1-1 ③基本認証の例
![001.jpg](https://qiita-image-store.s3.amazonaws.com/0/193975/6a681332-f725-5bd1-526f-896634674643.jpeg)


#2 LDAP サーバーの準備
##2-1 OS導入
`
OS : Ubuntu 14.04LTS
ホスト名 : host01
ドメイン名 : example.com`

##2-2 ldap導入
###2-2-1 パッケージのインストール
$ sudo apt-get -y install slapd ldap-utils

###2-2-2 初期設定
$ sudo dpkg-reconfigure slapd
`
ドメイン名 : example.com`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/1c1d6b3b-76ce-d396-c701-6633c835637c.png)


###2-2-3 base.ldif設定
$ sudo vi base.ldif

```
dn: ou=people,dc=example,dc=com
objectClass: organizationalUnit
ou: people
dn: ou=groups,dc=example,dc=com
objectClass: organizationalUnit
ou: groups
```

$ sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f base.ldif


##2-3 LDAP管理ユーティリティのインストール
###2-3-1 パッケージのインストール
$ sudo apt-get install phpldapadmin -y

###2-3-2 config.php修正
$ sudo vi /etc/phpldapadmin/config.php

```
//  $servers->setValue('server','port',389);
↓
$servers->setValue('server','port',389);
```
$ sudo vi  /usr/share/phpldapadmin/lib/TemplateRender.php

```
  $default = $this->getServer()->getValue('appearance','password_hash');
↓
  $default = $this->getServer()->getValue('appearance','password_hash_custom');
```

###2-3-3 設定の反映
$ systemctl restart apache2

##2-4 グループ、ユーザーの追加
ldapadminツールで、以下のグループ、ユーザーを追加します。
http://LDAPサーバーのホスト名/phpldapadmin/index.php
###2-4-1 グループの追加

```
cn=group01,ou=groups,dc=example,dc=com
GID=500
Group=group01
objectClass=posixGroup
```

![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/75c397e1-e731-6094-4ab2-3f5341790602.png)

###2-4-2 ユーザーの追加

```
cn=Tarou Test,ou=poeple,dc=example,dc=com
Common Name=Tarou Test
First Name=Tarou
GID Number=500
Home Directory=/home/users/ttest
Last Name=Test
Login shell=/bin/sh
objectClass=inetOrgPerson
            posixAccount
UID Number=1001
User ID=ttest
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/b78b5c4e-2511-330b-9bfa-9ab0fc0ddb7a.png)


#3 API Connect設定
##3-1 APIConnect上の認証レジストリーの追加
API Manager ユーザーインターフェースにログイン
https://APIManagerサーバーホスト名/apim
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/aee755b6-f70e-ecea-04f1-af82033f25a1.png)

管理を選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/c1fde8ce-058c-7ae9-9726-788195ae32a4.png)

ユーザーレジストリーを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/e4c6112a-f4a5-9471-c728-ba19455b91d8.png)

追加をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/e3e08f4a-b5a6-f16b-7f37-3301cc88e899.png)

LDAPレジストリーを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/9778b83f-0376-7e93-0f09-73e0e7c7a4c8.png)

以下を入力し、「バインドのテストと基本DNの取得」をクリック
`表示名：ldapregistory01
名前：ldapregistory01
ホスト名：LDAPサーバーのIP
ポート：389
認証済みバインド
管理DN：cn=admin,dc=example,dc=com
パスワード：管理DNのパスワード`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/59b99671-99ca-7f8e-06d3-1df3544cbb26.png)

更に以下を入力し、「構成のテスト」をクリック
`基本DN : dc=example,dc=com
接頭部 : (uid=
接尾部 : )`
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/00a98da5-a369-4a4d-e1fc-cd13ce1b1e3a.png)

最後に接続テストするユーザー名、パスワードを入力し、「構成のテスト」をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/aed6bdb4-8c0c-4b3d-95a8-df4f4bca236a.png)

「成功　接続に成功しました」と表示されることを確認します。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/a54eedc3-dcd3-bb11-1215-ca0be00a0599.png)


##3-2 基本認証で保護するAPI定義の作成
API Manager ユーザーインターフェースにログイン
https://APIManagerサーバーホスト名/apim
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/aee755b6-f70e-ecea-04f1-af82033f25a1.png)

ドラフトを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/34b2be13-3494-7f62-2a71-017b5af695e3.png)

APIを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/6e01ce5b-fe8a-599e-fecf-462b10a161a0.png)

追加→新規APIを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/62fd238d-9e6f-e29c-c7c2-6e52ee8b4846.png)

`タイトル：testapi
名前：testapi
基本パス：/testapi
バージョン：1.0.0`
と入力し、「APIの作成」をクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/16fe37d5-829b-7f15-c5ec-a0e10012b812.png)

セキュリティー定義のセクションに移動
 ※デフォルトで、clientIdHeader（APIキー）による保護が設定されます。これはAPI保護の基本機能のうち、「①APIキー」に相当する設定になります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/fdbe9f9b-6841-07a6-c819-7dc44cdb4931.png)

セキュリティー定義の追加ボタンをクリック
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/9643c6fb-b856-0bcc-7f3d-964420f6a9a5.png)

「基本」を選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/a275feec-e6ff-5104-0faa-4e00d1e0822c.png)

`名前 : basic01
認証に使用 : ユーザー・レジストリー
ユーザー・レジストリー : ldapregistory01`
を入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/d04756be-0b1b-72f1-00ba-502be0dfc28b.png)

「セキュリティー」セクションで「basic01（基本）」にチェックを追加します。これにより、このAPIに対する保護として、「③基本認証」が追加されます。この設定では、「①APIキー」と「③基本認証」の両方を使って保護が行われます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/193975/5577b5ef-6295-7199-56c9-3c3c5ee1e25f.png)

後は、「パス」セクション、「ポリシー・アセンブリー」セクションなど、API定義に必要な項目を設定し、製品に追加→デプロイします。
APIの実行時は以下のHTTPヘッダを指定してください。
・APIキー
　X-IBM-Client-Id: *開発者ポータルで発行するクライアントID*
・基本認証
　Authorization: Basic *「ユーザーID:パスワード」をbase64エンコードした文字列*

以上で、LDAPサーバーを使ったAPIの基本認証の設定例の紹介を終わります。


# 免責事項
この記事の内容は不正確である可能性があります。この記事の内容やその利用等によって生じた、いかなる損害に対しても責任は負いません。