IBM Security Verify でユーザー名のリカバリー (Username recovery)を利用する

# はじめに

9月のアップデートで、[ユーザー名のリカバリー機能](https://www.ibm.com/docs/ja/security-verify?topic=launchpad-recovering-your-username)が追加となりました。
(以前からAPI Referenceの [User SelfCare API](https://docs.verify.ibm.com/verify/reference/usernamerecovery)として提供されていました。)

|![forgotusername3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/dc4602a4-ee78-e127-d8ab-5f0c4fed9b7b.png)
|:--|

以下の画面のように、ユーザー名をお忘れですか？のリンクを追加できます。早速動作を試してみました。
![forgotusername1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/83aa3714-98a6-b003-3e7f-09af57fb1cbe.png)


# 1.設定方法について

① 管理画面-「Authentication」-「Identity Providers」で「username recovery」にチェックを入れます。

![forgotusername2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/17a73ed6-a02e-8d0b-ae6e-3ad907b8e422.png)

②ユーザーに入力させる属性を2つまで選択できます。
2つの属性でユーザーが一意に絞り込みできないとユーザー名のリカバリーは機能しません。
ここではメールアドレス(email)と、携帯電話番号(mobile_number)を指定しました。
属性はドロップダウンから選択します。
![forgotusername4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/f46eccb4-e59e-7264-577b-330b7f22e35b.png)


# 2.ユーザー名復旧の流れについて

①IBM Security Verifyのログイン画面で、「ユーザー名をお忘れですか？」のリンクをクリックします。
![forgotusername1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/83aa3714-98a6-b003-3e7f-09af57fb1cbe.png)

②メールアドレス(email)と、携帯電話番号(mobile_number)を指定します。

携帯電話番号をRFC3966に従って、+81-123-456-7890と登録していた場合、は国番号「+81」と残り(123-456-7890)を入力して属性と一致させる必要があります。

電話番号の入力方法をいくつか確認したところ、ハイフンの入力有無は影響しない結果でした。

|国番号を除く電話番号の指定方法  |リカバリー可否 |
|---|---|
|-123-456-7890 |リカバリー可  |
|123-456-7890  |リカバリー可 |
|1234567890 |リカバリー可  |
|01234567890  |リカバリー不可  |


![forgotusername5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/4f47ace2-37b3-7127-8b3e-84eeb92ac163.png)

③続行を押して画面遷移することを確認します。
入力内容が正しい/誤りによらず、こちらの画面が表示されます。

![forgotusername6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/0ac9f4e3-9147-94f9-42fb-875ae558feeb.png)

④入力した情報が正しい場合、ユーザー名が含まれたメールを受け取ります。

![forgotusername7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/0fad15cf-ed27-d0dd-11bb-e66941acf9f8.png)


# 3.管理者によるユーザー名復旧リクエストの確認方法について


失敗したときのログをAPIで確認すると、2件のログが出力されています。

```
～～～1件目 抜粋開始～～～
"data": {
 "result": "failure",
 "api_grant_type": "urn:ibm:params:oauth:grant-type:apikey",
 "performedby_type": "intraservice",
 "resource": "user",
 "origin": "xxx.xxx.xxx.xxx",
 "json": "{\"stateId\":\"default\",\"attributes\":[{\"name\":\"mobile_number\",\"value\":\"+8101234567890\"},{\"name\":\"email\",\"value\":\"test@test.com\"}],\"steps\":[{\"method\":\"email\",\"data\":{\"correlation\":\"7918\"}}]}",
  "cause": "システムはユーザー名リカバリー・トランザクションを作成できません。属性 \"[mobile_number=+8101234567890, email=test@test.com]\" を使用してユーザーのアカウントを検出できません。",
 "messageid": "CSIAM1090E",
 "action": "usernamerecovery",
 "location": "https://xxxx.verify.ibm.com/gta/v1.0/usc/username/recovery",
 "devicetype": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
                    }
～～～1件目 抜粋終わり～～～

～～～2件目 抜粋開始～～～
"data": {
 "result": "failure",
 "api_grant_type": "urn:ibm:params:oauth:grant-type:apikey",
 "performedby_type": "user",
 "resource": "user",
 "origin": "xxx.xxx.xxx.xxx",
 "cause": "ユーザーのユーザー名がリカバリーされませんでした。",
 "messageid": "CSIAM1092E",
 "action": "usernamerecovery",
 "self": "true",
 "location": "https://xxxx.verify.ibm.com/gta/v1.0/usc/username/recovery/null",
 "devicetype": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
                    }
～～～2件目 抜粋終わり～～～
```

成功したときのログをAPIで確認すると、2件のログが出力されています。

```
～～～1件目 抜粋開始～～～
"data": {
 "result": "success",
 "api_grant_type": "urn:ibm:params:oauth:grant-type:apikey",
 "performedby_type": "intraservice",
 "targetid": "<userid>",
 "resource": "user",
 "origin": "xxx.xxx.xxx.xxx",
 "json": "{\"stateId\":\"default\",\"attributes\":[{\"name\":\"mobile_number\",\"value\":\"+811234567890\"},{\"name\":\"email\",\"value\":\"test@test.com\"}],\"steps\":[{\"method\":\"email\",\"data\":{\"correlation\":\"9805\"}}]}",
 "cause": "属性「[mobile_number=+811234567890, email=test@test.com]」を使用してユーザーのアカウントを検出する方法で、ユーザーに対してユーザー名リカバリー・トランザクションが作成されました。",
 "messageid": "CSIAM1089I",
 "action": "usernamerecovery",
 "location": "https://xxxx.verify.ibm.com/gta/v1.0/usc/username/recovery",
"devicetype": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
}

～～～1件目 抜粋終わり～～～

～～～2件目 抜粋開始～～～
"data": {
 "api_grant_type": "urn:ibm:params:oauth:grant-type:apikey",
 "performedby_type": "user",
 "targetid": "xxxxxxxxxx",
 "resource": "user",
 "origin": "xxx.xxx.xxx.xxx.",
 "performedby_username": "<username>",
 "cause": "ユーザーのユーザー名がリカバリーされました。",
 "messageid": "CSIAM1091I",
 "devicetype": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36",
 "performedby_realm": "cloudIdentityRealm",
 "target": "<username>",
 "result": "success",
 "performedby": <userid>",
 "action": "usernamerecovery",
 "self": "true",
 "location": "https://xxxx.verify.ibm.com/gta/v1.0/usc/username/recovery/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
}
～～～2件目 抜粋終わり～～～
```



# 最後に

新機能の1つであるユーザー名を復旧する機能についてご紹介いたしました。