Guardian for Android SDK

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依存関係ファイルに追加します: implementation 'com.auth0.android:guardian:0.4.0' 最新バージョンはリポジトリのReleasesタブ、Maven、またはJCenterで確認できます。

  2. Gradleの依存関係を追加したら、プロジェクトをGradleファイルと忘れずに同期させます。

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

  1. [Dashboard] > [Security(セキュリティ)] > [Multifactor Auth(多要素認証)] > [Push via Auth0 Guardian(Auth0 Guardianを介してプッシュ)]に進みます。

  2. 上部のスイッチを切り替えて有効にします。

[Auth0 Dashboard] > [Security(セキュリティ)] > [Multi-factor Auth(多要素認証)] > [Guardian] > [Custom(カスタム)] > [Amazon SNS]

3.プッシュ通知を構成します

SDKを使用する

GuardianはSDKの中核です。特定のテナントURL向けにこのクラスのインスタンスを作成する必要があります。

Uri url = Uri.parse("https://<tenant>.<region>.auth0.com");

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

Was this helpful?

/

または

String domain = "<tenant>.<region>.auth0.com";

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

Was this helpful?

/

登録

第二要素(デバイス上のアプリのインスタンス)とAuth0アカウントの間のリンクは、登録と呼ばれます。

Guardian.enroll関数を使用して登録を作成できますが、まず、そのための新しいRSA鍵ペアを作成する必要があります。秘密鍵は、ログインを許可または拒否する要求に署名するために使用されます。公開鍵は、サーバーが要求の署名を後で検証できるように登録プロセス中に送信されます。

KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
keyPairGenerator.initialize(2048); // you MUST use at least 2048 bit keys
KeyPair keyPair = keyPairGenerator.generateKeyPair();

Was this helpful?

/

次に、Guardian QRコードをスキャンして登録情報を取得し、それを使用してアカウントを登録します。

Uri enrollmentUriFromQr = ...; // the URI obtained from a Guardian QR code

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

Enrollment enrollment = guardian
    .enroll(enrollmentUriFromQr, device, keyPair)
    .execute();

Was this helpful?

/

また、バックグラウンドスレッドで要求を実行することもできます。

guardian
    .enroll(enrollmentUriFromQr, device, keyPair)
    .start(new Callback<Enrollment> {
        @Override
        void onSuccess(Enrollment enrollment) {
            // we have the enrollment data
        }

        @Override
        void onFailure(Throwable exception) {
            // something failed
        }
    });

Was this helpful?

/

以下のデータを提供する必要があります。

変数 説明
deviceName 2番目の要素が必要とされるときにユーザーに表示される登録用の名前。
fcmToken Firebase Cloud Messaging(FCM)プッシュ通知サービスのトークン。詳細については、「サンプル登録」を参照してください。

登録解除する

MFAを無効にするには、登録を削除できます。

guardian
    .delete(enrollment)
    .execute(); // or start(new Callback<> ...)

Was this helpful?

/

ログイン要求を許可する

登録が完了すると、多要素認証が必要になるたびにFCMプッシュ通知が届きます。

Guardianは、FCMから受信したRemoteMessage内のMap<String, String>データを解析し、使用可能なNotificationインスタンスを返すメソッドを提供します。

// at the FCM listener you receive a RemoteMessage
@Override
public void onMessageReceived(RemoteMessage message) {
    Notification notification = Guardian.parseNotification(message.getData());
    if (notification != null) {
        // you received a Guardian notification, handle it
        handleGuardianNotification(notification);
        return;
    }

    /* handle other push notifications you might be using ... */
}

Was this helpful?

/

通知インスタンスを取得したら、allowメソッドを使用して認証要求を承認できます。以前に取得した登録も必要です。複数の登録がある場合、必ず通知と同じIDenrollmentIdプロパティ)のものを使用してください。

guardian
    .allow(notification, enrollment)
    .execute(); // or start(new Callback<> ...)

Was this helpful?

/

ログイン要求を拒否する

認証要求を拒否するには、代わりにrejectを使用します。また、任意で、Guardianログで確認できる拒否の理由を追加することもできます。

guardian
    .reject(notification, enrollment) // or reject(notification, enrollment, reason)
    .execute(); // or start(new Callback<> ...)

Was this helpful?

/

モバイル専用OTP登録をセットアップする

Auth0 DashboardまたはManagement APIを使用して、MFA要素としてワンタイムパスワード(OTP)を有効にすることができます。このオプションにはQRコードは必要なく、ユーザーが手動で登録できます。

ユーザーを登録に招待するには、Auth0 Dashboard > [User Management(ユーザー管理)] > [Users(ユーザー)]に進み、ユーザーを選択します。その後、[Details(詳細)]タブにアクセスし、[Multi-Factor Authentication(多要素認証)]セクションを使用して登録招待を送信します。

リソースを接続する

リソースは、Auth0 DashboardまたはGuardian SDKを使って接続できます。

Auth0 Dashboardの使用
  1. Auth0ログインプロンプトにアクセスし、提供されたコード、または別のソースから取得した同様のbase32エンコードキーをコピーします。

    An example login prompt displaying a one-time code
  2. コードを取得し、Guardian SDKに追加します。

Java

public String copiedCode = "{copiedCode}";

Kotlin

val copiedCode:String = "{copiedCode}"

Guardian SDKを使用する

まず、LoginCodeGeneratorクラスをプロジェクトに追加します。次に、getCode (String copiedCode)を使用して、アプリ内にワンタイムコードを生成します。

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) {

//            handle exception

       }

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

       return totp.generate();

   }

}

Was this helpful?

/

Kotlin

class LoginCodeGenerator {

   fun getCode(copiedCode: String): String {

       var key: ByteArray? = ByteArray(0)

       try {

           key = Base32.decode(copiedCode)

       } catch (ex: Base32.DecodingException) {

//            handle exception

       }

       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"

   }

}

Was this helpful?

/

ワンタイムコードを入力する

getCode()から生成されたワンタイムパスワードをAuth0ログインプロンプトに入力します。

An example login prompt displaying a one-time code

[Continue(続ける)]を選択すると、アプリケーションがユーザーの認証要素として追加されたことを示すメッセージが表示されます。

アプリでログインする

要素が登録されると、ユーザーはアプリを使用してログインできるようになります。まず、認証方法としてGuardianアプリを選択します。

The authentication method selection screen

ワンタイムコードを生成するには、Auth0ログインプロンプトからコピーしたコードを使用してgetCode(copedCode:String)を呼び出します。

次に、ワンタイムコードをログインプロンプトに入力し、本人確認を行います。

The Verify Your Identity screen prompting the user for a one-time code

もっと詳しく