IBM Security Verify API の テーマ機能で画面カスタマイズする～準備編～

# はじめに
2021年4月のアップデートで、アプリケーションごとに画面カスタマイズを制御する「テーマ」という機能が追加されました。

|![qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/d114efcb-9132-41ca-c97b-107ae12ac0ad.png)
|:--|

以前ご紹介した「テンプレート機能」は、IBM Security Verify テナント単位で画面カスタマイズが適用されました。

- [IBM Security Verify API で テンプレートをカスタマイズする～準備編～](https://qiita.com/fitz/items/3714fa62360c08a5557b)
- [IBM Security Verify API で テンプレートをカスタマイズする～実践編～](https://qiita.com/fitz/items/eb8b850469c3c6bc5b4f)

このため、IBM Security Verifyが連携するアプリケーションが複数あった場合に、アプリケーション単位でログイン画面の見た目を変更することはできませんでした。

4月にリリースされたテーマ機能を利用することで、アプリケーション単位でカスタマイズができるようになりました。
<テーマ活用イメージ＞

|![qiita_theme (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/e6bf2841-91d4-1169-e1be-efdaaabf7e2c.png)
|:--|

画面カスタマイズを行う際には、以下の流れで操作します。

- Defaultテーマをダウンロードする
- テーマをカスタマイズする
- カスタマイズしたテーマをアップロードする。
- アプリケーションに対してテーマを適用する。

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

- ユーザーの取得に利用するAPIは、以下の項目になります。
- Customization-Theme

![qiita_theme (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/ada19038-dd9b-fb5b-8d0a-d920d322ab67.png)

画面カスタマイズに関するヘルプはこちらです。

- テーマを管理する
    - https://www.ibm.com/docs/ja/security-verify?topic=branding-managing-themes#t_customizing_themes

# 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クライアントの追加」をクリックします。
![template_base (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/1f65e069-62f2-b3b3-1d60-0fa7618f3ba6.png)

アクセス件を与えるAPIとしては以下を選択して、「保存」します。
- テンプレートの管理
    - 付与する権限は「テンプレート」です。「テーマ」のみ変更する権限はありません。

登録した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.テーマのダウンロード方法
テーマをダウンロードします。
テーマのファイル名は、デフォルトの「theme.zip」を利用します。

```
curl -X GET https://<テナント名＞.verify.ibm.com:443/v1.0/branding/themes/default -H "Accept: application/octet-stream" -H "Authorization: Bearer <アクセストークン>" --output <出力先＞\themes.zip
```
![qiita_theme (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/121462e1-e6ca-f739-fdf0-a1dc5667691b.png)

ダウンロードしたテーマをエクスプローラーで開き、theme.zip\templatesフォルダを開くと以下のようなフォルダ階層となっています。テンプレートのときよりフォルダ階層は少ないです。

|![qiita_theme (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/416eec82-57cc-38ee-a918-0c8dc2fd3a54.png)
|:--|

# 4.テーマのアップロード方法
カスタマイズしたテーマをアップロードするためには、2つのファイルが必要です。

- 1.カスタマイズしたテーマファイル
- 2.テーマ名を記載したconfig.jsonファイル

2つ目のconfig.jsonの例です。
この例では、"custome1"というテーマ名称で登録されます。

```
{
"name": "custome1",
"description": "first theme customize",
}
```

テーマをアップロードするコマンドです。

```
curl -X POST  https://<テナント名＞.verify.ibm.com:443/v1.0/branding/themes -H "Content-Type: multipart/form-data" -H "Accept: application/json" -F configuration=@<参照先＞/config.json -F "files=@<参照先＞/theme_file.zip" -H "Authorization: Bearer  <アクセストークン>"
```
![qiita_theme (7).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/983d7dd0-0cc4-17f8-f33b-a1ba691336bf.png)

# 5.テーマの適用方法
アプリケーションにテーマを適用するため、管理画面-アプリケーションから対象のアプリケーションを編集し、テーマを適用します。

![qiita_theme (8).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/8960979c-e9a5-6d71-d85a-c4f0af159d00.png)

# 6.テーマのリセット方法
テーマをリセットする場合は、2つの方法があります。

- 1.テンプレートをリセットする(一括削除)
- 2.個別のテーマを削除する

なお、アプリケーションにテーマが適用されている場合は、テーマを解除する必要があります。

1つ目のテンプレートリセットコマンドは次のようになります。

```
curl -i -X DELETE  https://<テナント名＞.verify.ibm.com:443/v1.0/branding/reset -H "Authorization: Bearer <アクセストークン>"
```
![template_base (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/00aff268-7daf-92a3-e262-d7f26ace1e74.png)

レスポンスコードは204になります。

なお、テーマがアプリケーションに適用された状態でテンプレートをリセットすると、以下のようなエラーになります。
![qiita_theme (9).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/88a271ad-f702-619a-1716-5a1b84290a8f.png)

2つ目のテーマの個別削除には、テーマIDが必要になります。
以下のコマンドでテーマIDを取得します。

```
curl -X GET  https://<テナント名＞.verify.ibm.com:443/v1.0/branding/themes -H "Authorization: Bearer <アクセストークン>""
```
![qiita_theme (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/75cc789f-8b00-3b3b-2820-622ead74682a.png)

テーマの個別削除コマンドは次のようになります。

```
curl -i -X DELETE  https://<テナント名＞.verify.ibm.com:443/v1.0/branding/themes/<テーマID＞ -H "Authorization: Bearer <アクセストークン>"
```
![qiita_theme (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/61ac4ada-a706-8431-898b-4adacba4dfd7.png)

# 最後に
準備編として、テーマを利用した画面カスタマイズの基本的な操作、コマンドについてご紹介しました。
実践編では実際の画面を変更する方法について記載したいと思います。