メインコンテンツへスキップ
Guardian for Android SDK を使用すると、Guardian 機能を備えた Android アプリを作成でき、プッシュ通知による (MFA) への安全なアクセスを実現できます。このツールキットを使えば、組織のルックアンドフィールに合わせて、Guardian アプリケーションを独自にカスタマイズして構築できます。詳細については、MFA のプッシュ通知を設定する をご覧ください。 Guardian for Android SDK を使用するには、Android API レベル 15 以上が必要です。

Guardian Android SDK をインストールする

Guardian は、Maven CentralJCenter の両方で利用できます。
  1. Guardian を使用するには、build.gradle ファイルの dependencies セクションに次の行を追加します。 implementation 'com.auth0.android:guardian:0.4.0' 最新バージョンは、リポジトリの Releases タブ、Maven、または JCenter で確認できます。
  2. Gradle の依存関係を追加したら、必ずプロジェクトを Gradle ファイルと同期してください。

Guardian のプッシュ通知を有効にする

  1. Dashboard > Security > Multifactor Auth > Push via Auth0 Guardian に移動します。
  2. 上部のスイッチをオンにして有効にします。
Auth0 Dashboard > Security > Multi-factor Auth > Guardian > Custom > Amazon SNS
  1. プッシュ通知を設定します

SDK を使用する

Guardian は SDK の中核となるクラスです。使用するテナントの URL に対して、このクラスのインスタンスを作成する必要があります。
Uri url = Uri.parse("https://<tenant>.<region>.auth0.com");

Guardian guardian = new Guardian.Builder()
    .url(url)
    .build();
または
String domain = "<tenant>.<region>.auth0.com";

Guardian guardian = new Guardian.Builder()
    .domain(domain)
    .build();

登録

第2要素 (デバイス上のアプリのインスタンス) と Auth0 アカウントのひも付けを、登録と呼びます。 Guardian.enroll 関数を使用して登録を作成できますが、その前に登録用の新しい RSA 鍵ペアを作成する必要があります。秘密鍵は、ログインを許可または拒否するリクエストに署名するために使用します。公開鍵は登録プロセス中に送信され、サーバーが後でリクエストの署名を検証できるようになります。
KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // 2048ビット以上のキーを使用する必要があります
KeyPair keyPair = keyPairGenerator.generateKeyPair();
次に、Guardian の QR コードをスキャンして登録情報を取得し、その情報を使用してアカウントを登録します。
Uri enrollmentUriFromQr = ...; // Guardian QRコードから取得したURI

CurrentDevice device = new CurrentDevice(context, "fcmToken", "deviceName");

Enrollment enrollment = guardian
    .enroll(enrollmentUriFromQr, device, keyPair)
    .execute();
別の方法として、バックグラウンドスレッドでリクエストを実行することもできます。
guardian
    .enroll(enrollmentUriFromQr, device, keyPair)
    .start(new Callback<Enrollment> {
        @Override
        void onSuccess(Enrollment enrollment) {
            // 登録データを取得しました
        }

        @Override
        void onFailure(Throwable exception) {
            // エラーが発生しました
        }
    });
次のデータを指定する必要があります。
VariableDescription
deviceName第 2 要素が必要なときにユーザーに表示される登録名です。
fcmTokenFirebase Cloud Messaging (FCM) プッシュ通知サービス用のトークンです。詳細については、Sample Register を参照してください。

登録解除

MFA を無効にするには、登録を削除できます。
guardian
    .delete(enrollment)
    .execute(); // または start(new Callback<> ...)

ログインリクエストを承認する

登録が完了すると、ユーザーに多要素認証が必要になるたびに、FCM のプッシュ通知を受信します。 Guardian には、FCM から受信した RemoteMessage に含まれる Map<String, String> のデータを解析し、すぐに利用できる Notification インスタンスを返すメソッドがあります。
// FCM リスナーで RemoteMessage を受信します
@Override
public void onMessageReceived(RemoteMessage message) {
    Notification notification = Guardian.parseNotification(message.getData());
    if (notification != null) {
        // Guardian 通知を受信した場合の処理
        handleGuardianNotification(notification);
        return;
    }

    /* その他のプッシュ通知の処理 ... */
}
通知インスタンスを取得したら、allow メソッドを使用して認証リクエストを承認できます。さらに、事前に取得した登録も必要です。登録が複数ある場合は、通知の enrollmentId プロパティと同じ id を持つものを必ず使用してください。
guardian
    .allow(notification, enrollment)
    .execute(); // または start(new Callback<> ...)

ログインリクエストを拒否する

認証リクエストを拒否するには、代わりに reject を使用します。必要に応じて拒否理由を追加することもでき、その理由は Guardian のログで確認できます。
guardian
    .reject(notification, enrollment) // または reject(notification, enrollment, reason)
    .execute(); // または start(new Callback<> ...)

モバイル専用の OTP 登録を設定する

または を使用して、ワンタイムパスワード (OTP) を MFA 要素として有効にできます。このオプションでは QR コードは不要で、ユーザーは手動で登録できます。 ユーザーに登録招待を送信するには、Auth0 Dashboard > User Management > Users に移動してユーザーを選択します。次に、そのユーザーの Details タブを開き、Multi-Factor Authentication セクションから登録招待を送信します。

リソースを接続する

Auth0 Dashboard または Guardian SDK を使用して、リソースを接続できます。
Auth0 Dashboardを使用する
  1. Auth0のログイン プロンプトを開き、表示されたcode、または別のソースから取得した同様のBase32でエンコードされたキーをコピーします。
    ワンタイム code が表示されたログイン プロンプトの例
  2. codeを取得したら、それをGuardian SDKに追加します。
Java public String copiedCode = "{copiedCode}"; Kotlin val copiedCode: String = "{copiedCode}"
Guardian SDK を使用する
まず、LoginCodeGenerator クラスをプロジェクトに追加します。次に、getCode (String copiedCode) to を使用して、アプリ内でワンタイムコードを生成します。 Java
public class LoginCodeGenerator {

   private static final int TOTP_LENGTH = 6;

   private static final int TOTP_DURATION = 30;

   private static final String TOTP_ALGORITHM = "SHA1";

   public String getCode(String copedCode) {

       byte[] key = new byte[0];

       try {

           key = Base32.decode(copedCode);

       } catch (Base32.DecodingException ex) {

//            例外を処理する

       }

       TOTP totp = new TOTP(TOTP_ALGORITHM, key, TOTP_LENGTH, TOTP_DURATION);

       return totp.generate();

   }

}
Kotlin
class LoginCodeGenerator {

   fun getCode(copiedCode: String): String {

       var key: ByteArray? = ByteArray(0)

       try {

           key = Base32.decode(copiedCode)

       } catch (ex: Base32.DecodingException) {

//            例外処理

       }

       val totp = TOTP(TOTP_ALGORITHM, key, TOTP_LENGTH, TOTP_DURATION)

       return totp.generate()

   }

   companion object {

       private const val TOTP_LENGTH = 6

       private const val TOTP_DURATION = 30

       private const val TOTP_ALGORITHM = "SHA1"

   }

}

ワンタイムコードを入力

getCode() で生成されたワンタイムパスワードを Auth0 のログインプロンプトに入力します。
ワンタイムコードが表示されたログインプロンプトの例
[続行] を選択すると、アプリケーションがユーザーの認証要素として追加されたことを示すメッセージが表示されます。

アプリでログインする

認証要素の登録が完了すると、ユーザーはアプリを使ってログインできます。まず、認証方法として Guardian アプリを選択します。
認証方法の選択画面
ワンタイムコードを生成するには、Auth0 のログインプロンプトからコピーした code を使用して getCode(copedCode: String) を呼び出します。 次に、本人確認のためにログインプロンプトにワンタイムコードを入力します。
ユーザーにワンタイムコードの入力を求める「Verify Your Identity」画面

詳細情報