Android Studio と IBM Security Verify SDKをはじめて触ってみる②

# はじめに
前回記事では、GitHubに公開されているサンプルアプリケーションがAndroidデバイスで起動するところまで確認できました。
[Android Studio と IBM Security Verify SDKをはじめて触ってみる①](https://qiita.com/fitz/items/b9b19fba10f769e491a4)

今回は、QR Code Scan Demoアプリ/Authenticator Demoアプリでなにができるか動作確認を行っていきます。

動作確認した環境は、Windows10＋Android Studio 4.2.1 ＋Android10デバイス(Xperia XZ2)となります。

# 1.Authenticator Demoアプリを試す

**7/29 更新：このAuthenticator DemoアプリはTOTPを想定した作りになっていました。記事のように、IBM Security Verify アプリとして登録すると、登録処理はできますが、多要素認証として利用できる状態まではなりませんでした。IBM Security Verifyアプリの登録処理部分のサンプルコードとしてご利用頂くのがよいと思います。**

前回セットアップしたAuthenticator Demoアプリの動作確認から実施しました。

まずは、IBM Security Verifyにログイン/プロフィールからセキュリティタブを表示します。
多要素認証をを求められるため、利用できるオプションを用いて行います。

「新しい方式の追加」をクリックします。

![androidStudio (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/7f044330-fee8-f109-500e-928c41081361.png)

IBM Security Verify アプリの「デバイスの追加」メニューをクリックします。
![androidStudio (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/97d715f8-336f-9973-a0c3-61c05c3088c9.png)

「次：アカウントの接続」をクリックします。
![androidStudio (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/b2588406-291e-d6ad-85a3-a0c8dab8b7ea.png)

QRCodeが表示されることを確認します。
![androidStudio (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/9deed720-6f4c-f0e2-cc19-2d9fdb18204d.png)

Androidで起動したAuthenticator DemoアプリでQRCodeを読み取るとHellow Worldと表示されます。

<img width="40%" alt="androidStudio (27).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/70ae6d76-886a-2717-a29b-13c17fb14016.png">

デバイスの検証メニューは動作しなかったため、キャンセルし、IBM Security Verify側に多要素認証要素が登録されたか確認しました。

![androidStudio (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/ac8d26b4-f8f5-2e5b-3bf5-4d8a47ca64cd.png)

前の画面に戻ると、IBM Security Verifyの多要素認証が追加されていることが確認できます。
![androidStudio (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/776a7017-b6fa-a125-785e-898c26a9b891.png)

このサンプルを利用することで、IBM Security Verify上にアプリを登録することができました。
また、デバイスの検証やテストはこのサンプルアプリでは動作させることができませんでした。

![androidStudio (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/e68016aa-bae5-c893-9484-70102c63c808.png)

![androidStudio (31).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/c9ac9841-6f35-b108-3fde-8fb55509fe3f.png)

# 2.QR Code Scan Demoアプリを試す
次に、QR Code Scan Demoアプリの動作確認を行います。
Android Studioからのアプリケーション起動や、SDKファイルの配置、アプリケーションの実行手順は、Authenticator Demoアプリと同様の手順です。

IBM Security Verifyでセキュリティタブを開き、「新しい方式の追加」をクリックします。

![androidStudio (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/7f044330-fee8-f109-500e-928c41081361.png)

オーセンティケーター・アプリのセットアップメニューをクリックします。
![androidStudio (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/5c061f8c-e598-8311-4a0f-041066ee2f66.png)

「次：オーセンティケーターの接続」をクリックします。
![androidStudio (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/f33e5513-f905-0e46-89ce-9c92b8f4a98d.png)

QRCodeが表示されることを確認します。
![androidStudio (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/6b9c7418-73bf-0fb0-ca39-926ec251b84d.png)


Androidで起動したQR Code Scan DemoアプリでQRCodeを読み取ると、TOTPのSecretが表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/69a0ad6b-0a70-239f-d3f9-299a47c5ced4.png" width=50%>

このSecretを用いて、6桁のTOTPを生成します。
サンプルアプリでTOTP生成機能があるかわからなかったため、Pythonで実装したアプリを利用しました。

![androidStudio (37).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/426fb78e-330e-1fdf-70fb-7c8e9a567697.png)

コードの中身は、こちらの記事を参考にさせて頂きました。
参考: [PythonでTOTP(Time-based One-Time Password)を実行する](https://qiita.com/nardtree/items/f81a75bb603f88ee0b1b)

「次：オーセンティケーターのテスト」をクリックします。
![androidStudio (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/6b9c7418-73bf-0fb0-ca39-926ec251b84d.png)

アクセス・コードに生成したTOTPを入力して、「次：検証」をクリックします。
![androidStudio (38).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/1f38acf1-4cbf-9888-c9ed-3800e8013624.png)

無事にオーセンティケーターが登録が完了しました。
![androidStudio (39).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/3fe3bb12-9ab9-10c5-2e17-46280a7e7753.png)

セキュリティタブでもオーセンティケーター・アプリの登録が確認できました。
![androidStudio (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/aecbc2a4-5ef1-0ac7-59b5-e5fc099d3455.png)

このアプリは、TOTP生成に必要なSecretなどの情報を取得する機能を持っていることが確認できました。
TOTPの生成機能が見つからなかったため、Pythonで代替して動作確認を行いました。

# 3.アプリケーションのコードを理解するためには？

サンプルのコードの概要を理解するためには、以下の記事が参考になります。
[Create your own Authenticator](https://www.ibm.com/blogs/security-identity-access/create-your-own-authenticator/)

この記事の中で、Authenticator Demoアプリのコードの解説があります。
<img width="80%" alt="androidStudio (43).png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/b31c1545-0dbe-1233-915e-94a03cd23780.png">

各クラスの中身を理解するためには、SDKファイルに含まれるjavadocが参考になります。

![androidStudio (41).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/bbfd1b08-534a-b45e-46ae-64ce3ca83e18.png)

HTMLファイルが含まれていて、クラスの説明など確認できます。
![androidStudio (42).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678692/dd327cd4-7f07-47ca-cd0d-d9d69357e856.png)

# 最後に
IBM Security Verify SDKを使ってGithubに公開されているアプリの動作確認を行いました。
Android Studio利用が初めてのため、お作法など抜けている箇所があると思いますが、ご容赦ください。

7/29追記：
TOTPをSDKを使って生成する方法を試しました。
[Android Studio と IBM Security Verify SDKをはじめて触ってみる③](https://qiita.com/fitz/items/ad44927116fdc8462d29)

8/4追記：
Authenticator Demoアプリで、デバイス検証メニューが無効な理由を調べてみました。
[Android Studio と IBM Security Verify SDKをはじめて触ってみる④](https://qiita.com/fitz/items/e23df9b54c7e24eb3306)