IBM Security Verify API で ユーザーの最終ログイン日を取得する

# はじめに
IBM Security Verify(ISV) APIを利用して、一定期間ログインしていないユーザー情報を取得する方法についてご紹介いたします。

# APIのリファレンス
APIのリファレンスは、以下のURLから確認できます。
https://<自分のテナント名＞.verify.ibm.com/developer/explorer/#

- ユーザーの取得に利用するAPIは、以下の項目になります。
- Users Management Version 2.0 

APIに関するKCのヘルプはこちらです。
https://www.ibm.com/support/knowledgecenter/ja/SSCT62/com.ibm.iamservice.doc/concepts/apis.html

# 1.IBM Security VerifyへのAPIクライアントの登録
OAuth アクセストークンを取得するために使用するクライアント ID とクライアントシークレットを準備します。
ブラウザで、IBM Security Verifyの管理画面にアクセスします。
https://<自分のテナント名＞.verify.ibm.com/ui/admin

「構成」-「API クライアント」タブを開きます。
![OTP-000002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/9799fa7c-cb28-7726-df1d-ccdece0060e8.png)
「APIクライアントの追加」をクリックします。
![OTP-000003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/47e91160-3fd1-5d26-c341-612cd77249f5.png)


アクセス件を与えるAPIとしては以下を選択して、「保存」します。
- ユーザーおよび標準グループの管理

読み込みだけであれば、ユーザーおよび標準グループの読み取り でも可能です。

![qiita (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/24a0918e-101a-c91f-659e-9e84f785b481.png)

登録したAPIクライアントを編集モードにすると、クライアントID/クライアント秘密鍵をコピーできます。


# 2.アクセストークンの取得

```
curl -X POST "https://<テナント名＞.verify.ibm.com/oidc/endpoint/default/token" --header "Content-Type: application/x-www-form-urlencoded" --data-urlencode "grant_type=client_credentials" --data-urlencode "client_id=<クライアントID>" --data-urlencode "client_secret=＜クライアント秘密鍵＞"
```
取得したアクセストークンは赤枠部分になります。
![qiita (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/e28268f3-3827-0a17-9f99-0743503435c8.png)


# 3.ユーザー一覧の取得
ユーザー一覧を取得するためには、以下のコマンドを実行します。

```
curl -i -X GET https://<テナント名＞.verify.ibm.com/v2.0/Users --header "Content-Type: application/json" --header "Authorization: Bearer <アクセストークン>"

```
レスポンスコードは200になります。
![qiita (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/01e4a156-9f9f-c3e4-c675-d7fc6fa6ff1c.png)

ユーザー情報はJSON形式で出力されます。
![qiita (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/855c4e29-1bd0-9b3d-8a19-4548692c914c.png)


# 4.特定のユーザー情報の取得
ユーザーIDを加えることで、特定のユーザー情報を取得できます。

```
curl -i -X GET https://<テナント名＞.verify.ibm.com/v2.0/Users/<IBM Security Verify上で割り当てされたユーザーID> --header "Content-Type: application/json" --header "Authorization: Bearer <アクセストークン>"
```
赤枠の部分がユーザーIDに該当します。

![qiita (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/a3a625e0-3ad9-ddf5-9b56-9f043ffd7083.png)
![qiita (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/74aa08a4-71c5-e7c5-ae51-a2edb468f1da.png)



# 5.最終ログイン日の確認
最終ログイン日は、"lastLogin"の値が該当します。
"2020-12-03T07:57:31Z"という形式で、UTCで表記されます。

![qiita (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/180b473c-d650-6243-6a4c-00dfdb1e765b.png)


# 6.特定日付より前にログインしていないユーザーの取得
特定の日付より前にログインしていないユーザーの一覧を取得するには、filter、ltオプションを利用して絞り込みします。
この例では、最終ログイン日が"2021-01-04T06:44:25Z"より前のユーザーを検索しています。

```
curl -i -X GET https://<テナント名＞.verify.ibm.com/v2.0/Users?filter=urn:ietf:params:scim:schemas:extension:ibm:2.0:User:lastLogin%20lt%20%222021-01-04T06:44:25Z%22 --header "Content-Type: application/json" --header "Authorization: Bearer <アクセストークン>"
```

![qiita (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/eb0c686f-5f93-03e0-4281-1f5a6e6af5fa.png)

この例では3ユーザーが表示されています。(total results:3)
![qiita (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/64b079ce-7ede-9edd-c939-0ee88bfc9548.png)

# 最後に
IBM Security Verifyで、一定期間利用していないユーザーを調べたい場合は上記の方法で実装できます。
API経由で、アカウントの無効化も設定できるため、特定期間ログインしていないユーザーを無効化するという処理にも応用できます。