【ServiceNow】MFA登録時のアカウント名を変更する。

## 概要
ServiceNowで開発をしたことがある方はわかると思いますが、MFAを登録した際に表示されるアカウント名は任意のものにできないと思います。
開発で使用しているアカウントのMFAはインスタンス名が表示されるのですが、顧客に渡しているアカウントは別の表示みたいです。

今回は非正規な方法で名前の設定を実現させる方法をご紹介します。

## 注意事項
- 今回紹介する方法を実施する際は、自己責任でお願いします。
- 初期状態から設定をしています。環境固有の設定が邪魔をして実現できない場合もあります。

## どうするか
方法は簡単、サーバ処理でQRコードの情報を表示する前に、表示させるデータを書き換えるのです。

MFA登録のQRコードの中身はこのようになっています。ここの"issuer"にアカウント名が登録されています。
ここを書き換えることができれば、やりたいことを実現できます。
```
otpauth://totp/<UserName>?secret=<secret>&issuer=<AccountName>
```

## MFAを有効化する
1. [Multi-factor Authentication]>[Properties]を開く。
1. "Enable Multi-factor authentication"にチェックを入れる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/3990706e-09ef-409e-5ea3-b602e4614b85.png)
1. [Multi-factor Authentication]>[Multi-factor Criteria]を開く。
1. デフォルトで存在している"Role based multi-factor authentication"を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/2cf26c16-f9db-28c6-8d35-6d2330a9da5f.png)
1. MFAを強制したいロールを選択する。
※ログインできなくならないように気を付けてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/b68fce19-61bb-42da-e339-c0550fae3205.png)
1. "Active"にチェックを入れて、[Update]をクリックする。
1. ユーザーにMFA用のロールを割り当てる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/faf5a5ac-ceef-2525-a4a0-c0ef2d69f5a3.png)

## MFA登録時のアカウント名変更
1. [System UI]>[UI Pages]を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/70735175-e12b-39de-8c08-9a6a15956a15.png)
1. "multi_factor_auth_setup_page"を開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/4845b685-8506-8de3-81c8-22f97d4b8a0a.png)
1. "Client script"の項目に移動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/205ea751-6820-0f2b-36fc-33658174ec72.png)
1. 21行目当たりの"var bypassRemainingCount～"の次の行に下記構文を追加する。
issuerの後に任意のアカウント名を入力する。URLエンコード形式で記載すること。
記載の例だと「Instance Name」と記載されています。(%2520が空白文字)
"gel("imgCode").src = ～"でHTMLにデータを送っているので、それより前にデータを書き換えることにより、好きなアカウント名を設定できるのです。
    ```javascript
		//Using Google API
		qrCodeURL = "otpauth://totp/"+g_user.userName+"?secret="+qrCodeText;
		qrCodeURL = "https://chart.apis.google.com/chart?cht=qr&chs=250x250&chl="+encodeURI(qrCodeURL.replace(/ /g,''));
		qrCodeURL = qrCodeURL + "%26issuer=Instance%2520Name";
    ```
1. 保存ボタンをクリックする。
1. [Try It]をクリックしてQRコードが表示されることを確認する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/eb47e976-f55b-ab83-0915-a32c29361976.png)
1. 問題がなければ[Update]をクリックする。


## 実際に試してみる
1. ログイン画面に移動し、ログインする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/cee7a91c-1e96-91da-af1c-ca33fe349c4e.png)
1. 初期パスワードを設定する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/b7438e63-c832-83ab-bbb1-202bb74d5261.png)
1. AuthenticatorでQRコードを読み取る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/a8fe6d73-5f9d-0576-6655-4ad1ef18bff2.png)
1. 読み取ることができました。しっかりコードも表示されていますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/669525/ccbde254-c771-b66a-0a7d-b7da397b16db.png)

## 最後に
- このやり方がセキュリティ的にOKなのかはわからないので、自己責任でお願いします。
- 実は今回使用していたUIに慣れていないんですよね。少し戸惑いましたw
- 今回変更した設定(multi_factor_auth_setup_page)ですが、MFA設定後に特定の会社に所属しているユーザーをリダイレクトさせることもできるんですよね。ポータルに飛ばしたい時などに必要になると思います。要望があればリダイレクト関連の記事を投稿しようと思います。