ネイティブ認証を使用してサンプル Android (Kotlin) モバイル アプリでユーザーをサインインさせる
このガイドでは、Microsoft Entra のネイティブ認証を使用したサインアップ、サインイン、サインアウト、パスワード リセットのシナリオを示す、Android サンプル アプリケーションを実行する方法について説明します。
この記事では、次のことについて説明します。
- 外部テナントにアプリケーションを登録する。
- パブリック クライアントとネイティブ認証フローを有効にします。
- ユーザー フローを外部テナントに作成する。
- アプリケーションをユーザー フローに関連付けます。
- 外部テナントの詳細に独自の Microsoft Entra 外部 ID を使用するように Android 構成コード サンプル ファイルを更新します。
- サンプルのネイティブ Android モバイル アプリケーションを実行し、テストします。
前提条件
- Android Studio。
- 外部テナント。 お持ちでない場合は、無料試用版にサインアップしてください。
アプリケーションの登録
Microsoft Entra を使用してアプリケーションでユーザーをサインインできるようにするには、作成するアプリケーションを Microsoft Entra 外部 ID に認識させる必要があります。 アプリの登録によって、アプリと Microsoft Entra の間に信頼関係が確立されます。 アプリケーションを登録すると、外部 ID によって、アプリケーション (クライアント) ID と呼ばれる一意識別子が生成されます。これは、認証要求を作成するときにアプリを識別するために使用される値です。
Microsoft Entra 管理センターにアプリを登録する方法を次の手順に示します。
アプリケーション開発者以上として Microsoft Entra 管理センターにサインインします。
複数のテナントにアクセスできる場合、上部のメニューの [設定] アイコン を使用し、[ディレクトリとサブスクリプション] メニューから外部テナントに切り替えます。
[ID]>[アプリケーション]>[アプリの登録] を参照します。
[+ 新規登録] を選択します。
表示される [アプリケーションの登録] ページで、次のようにします。
- アプリのユーザーに表示されるわかりやすいアプリケーションの [名前] を入力します (例: ciam-client-app)。
- [サポートされているアカウントの種類] で、 [この組織のディレクトリ内のアカウントのみ] を選択します。
[登録] を選択します。
登録が成功すると、アプリケーションの [概要] ペインが表示されます。 アプリのソース コードで使用するアプリケーション (クライアント) ID を記録します。
パブリック クライアントとネイティブ認証フローの有効化
このアプリがパブリック クライアントであり、ネイティブ認証を使用できることを指定するには、パブリック クライアントとネイティブ認証フローを有効にします。
- アプリ登録ページから、パブリック クライアントとネイティブ認証フローを有効にしたいアプリ登録を選択します。
- [管理] で、 [認証] を選択します。
- [詳細設定] で、パブリック クライアント フローを許可します。
- [次のモバイルとデスクトップ フローを有効にする] で、[はい] を選択します。
- [ネイティブ認証を有効にする] で、[はい] を選択します。
- [保存] ボタンを選択します。
管理者の同意を与える
[アプリの登録] ページで、作成したアプリケーション ("ciam-client-app" など) を選択して、その [概要] ページを開きます。
[管理] の下にある [API のアクセス許可] を選択します。 構成済みアクセス許可一覧から、お使いのアプリケーションに User.Read アクセス許可が割り当てられています。 ただし、テナントが外部テナントであるため、コンシューマー ユーザー自身はこのアクセス許可に同意できません。 管理者は、テナント内のすべてのユーザーに代わってこのアクセス許可に同意する必要があります。
- [<ご使用のテナント名> に管理者の同意を与えます] を選択してから、[はい] を選択します。
- [最新の情報に更新] を選択し、両方のスコープの [状態] に "<ご使用のテナント名> に付与されました" と表示されていることを確認します。
ユーザー フローを作成する
以下の手順に従って、ユーザー フローを作成します。
アプリケーション開発者以上として Microsoft Entra 管理センターにサインインします。
複数のテナントにアクセスできる場合は、外部テナントを含むディレクトリを使用してください。
- ツール バーの [ディレクトリ + サブスクリプション] アイコンを選択します。
- [ポータルの設定] | [ディレクトリ + サブスクリプション] ページの [ディレクトリ名] の一覧で外部テナント ディレクトリを見つけて、[切り替え] を選択します。
サイドバー メニューで、[ID] を選択します。
[外部 ID]>[ユーザー フロー] の順に選択します。
[+ 新しいユーザー フロー] を選択します。
[作成] ページで、次のようにします。
ユーザー フローの [名前] ("SignInSignUpSample" など) を入力します。
[ID プロバイダー] の一覧で、[メール アカウント] を選択します。 この ID プロバイダーを使用すると、ユーザーが自分のメール アドレスを使用してサインインまたはサインアップできます。
[メール アカウント] で、2 つのオプションのいずれかを選択できます。 このチュートリアルでは、[メールのワンタイム パスコード] を選択します。
- [Email with password] (メール アドレスとパスワード): 新しいユーザーは、サインイン名としてメール アドレスを、その最初の要素の資格情報としてパスワードを使用してサインアップおよびサインインできます。
- [メールのワンタイム パスコード]: 新しいユーザーは、サインイン名としてメール アドレスを、資格情報の第一段階要素としてメールのワンタイム パスコードを使用してサインアップおよびサインインできます。 このオプションをユーザー フロー レベルで使用可能にするには、ワンタイム パスコード (OTP) のメール送信をテナント レベルで有効にする必要があります ([すべての ID プロバイダー]、[ワンタイム パスコードのメール送信] で[構成済み] を選び[はい] を選択してから [保存] を選択します)。
[ユーザー属性] で、サインアップ時にユーザーから収集する属性を選択できます。 このガイドでは、[国/地域] と [市区町村] を選択します。
[作成] を選択します 新しいユーザー フローは [ユーザー フロー] の一覧に表示されます。 必要に応じて、ページを更新してください。
アプリをユーザー フローに関連付ける
顧客ユーザーがアプリを使うとき、サインアップまたはサインイン エクスペリエンスが表示されるようにするには、アプリをユーザー フローと関連付ける必要があります。 複数のアプリケーションをユーザー フローに関連付けることができますが、1 つのアプリケーションを関連付けることができるユーザー フローは 1 つだけです。
サイドバー メニューで、[ID] を選択します。
[External Identities]、[User flows] (ユーザー フロー) の順に選択します。
[ユーザー フロー] ページで、前に作成した [ユーザー フロー名] (SignInSignUpSample など) を選びます。
[使用] で、[アプリケーション] を選択します。
[アプリケーションの追加] をクリックします。
一覧からアプリケーション ("ciam-client-app" など) を選択するか、検索ボックスを使用してアプリケーションを見つけ、それを選択します。
[選択] を選択します。
アプリをユーザー フローと関連付けたら、Microsoft Entra 管理センター内からアプリケーションでのユーザーのサインアップまたはサインイン エクスペリエンスをシミュレートして、ユーザー フローをテストできます。 そのためには、「サインアップとサインインのユーザー フローをテストする」の手順を使います。
サンプル Android モバイル アプリをクローンする
ターミナルを開き、コードを保存するディレクトリに移動します。
次のコマンドを実行して、GitHub からアプリをクローンします。
git clone https://github.com/Azure-Samples/ms-identity-ciam-native-auth-android-sample
サンプル Android モバイル アプリを構成する
Android Studio で、クローンしたプロジェクトを開きます。
app/src/main/res/raw/native_auth_sample_app_config.json ファイルを開きます。
次のプレースホルダーを見つけます。
Enter_the_Application_Id_Here
を、前に登録したアプリのアプリケーション (クライアント) ID に置き換えます。Enter_the_Tenant_Subdomain_Here
を、ディレクトリ (テナント) サブドメインに置き換えます。 たとえば、テナントのプライマリ ドメインがcontoso.onmicrosoft.com
の場合は、contoso
を使用します。 テナントのサブドメイン名を知らない場合は、テナントの詳細を読み取る方法をご確認ください。
これでアプリが構成され、実行する準備ができました。
サンプルの Android モバイル アプリケーションを実行してテストする
アプリをビルドして実行するには、次のステップに従います。
ツール バーの実行構成メニューからアプリを選択します。
ターゲット デバイス メニューで、アプリを実行するデバイスを選択します。
デバイスが構成されていない場合は、Android Emulator を使用するための Android 仮想デバイスを作成するか、物理 Android デバイスを接続する必要があります。
[実行] ボタンを選択します。 アプリで、[メール & OTP] 画面が開きます。
有効なメール アドレスを入力し、[サインアップ] ボタンを選択します。 アプリで送信コード画面が開き、そのメール アドレスに OTP コードが届きます。
受信した OTP コードを入力し、[次へ] を選択します。 サインアップが成功すると、アプリによって自動的にサインインされます。 メールの受信トレイに OTP コードが届かない場合は、しばらくしてから [パスコードの再送信] を選択して再送信します。
サインアウトするには、[Sign out] ボタンを選択します。
このサンプルでサポートされるその他のシナリオ
このサンプル アプリは、次の認証フローもサポートしています。
- メール + パスワードでは、パスワードとメールを用いたサインインまたはサインアップフローがサポートされます。
- メール + パスワード サインアップ (ユーザー属性あり)では、メールとパスワードによるサインアップと、ユーザー属性の送信について説明します。
- パスワード リセットには、セルフサービス パスワード リセット (SSPR) が含まれます。
- 保護された API へのアクセス では、ユーザーが正常にサインアップまたはサインインしてアクセス トークンを取得した後に、保護された API を呼び出す方法について説明します。
- Web ブラウザーへのフォールバックでは、ユーザーが何らかの理由でネイティブ認証を使用して認証を完了できない場合に、ブラウザー ベースの認証をフォールバック メカニズムとして使用する方法について説明します。
パスワード フローを使用してメールをテストする
このセクションでは、メールとパスワードを使用したフローをテストします。これには、メールとパスワードによるサインアップに、ユーザー属性や SSPR を組み合わせるなどのバリエーションが含まれます。
「ユーザー フローの作成」手順に従って、新しいユーザー フローを作成しますが、今回は認証方法として [メールとパスワード] を選択します。 ユーザー属性として [国/地域] と [市区町村] を構成する必要があります。 または、既存のユーザー フローを変更して、[メールとパスワード] を使用することもできます ([外部 ID]>[ユーザー フロー]>[SignInSignUpSample]>[ID プロバイダー]>[メールとパスワード]>[保存] を選択します)。
「アプリケーションを新しいユーザー フローに関連付ける」の手順に従って、新しいユーザー フローにアプリを追加します。
サンプル アプリを実行し、省略記号メニュー (...) を選択して、その他のオプションを開きます。
テストするシナリオ ([メール + パスワード]、[メール + パスワード サインアップ (ユーザー属性あり)]、 [パスワード リセット]など) を選択し、プロンプトに従います。 パスワードのリセットをテストするには、まずユーザーをサインアップし、テナント内のすべてのユーザーに対してメールワンタイム パスコードを有効にする必要があります。
保護された API フローの呼び出しテスト
ネイティブ認証を使用してサンプル Android モバイル アプリで保護された Web API を呼び出す手順に従って、サンプル Android モバイル アプリから保護された Web API を呼び出します。