次の方法で共有


チュートリアル: ネイティブ認証用に Android モバイル アプリを準備する

適用対象: 灰色の X 記号がある白い円。 従業員テナント 白いチェック マーク記号がある緑の円。 外部テナント (詳細情報)

このチュートリアルでは、Microsoft Authentication Library (MSAL) ネイティブ認証 SDK を Android モバイル アプリに追加する方法について説明します。

このチュートリアルでは、次の操作を行います。

  • MSAL 依存関係を追加します。
  • 構成ファイルを作成します。
  • MSAL SDK インスタンスを作成します。

前提条件

  • まだ行っていない場合は、「 ネイティブ認証を使用してサンプル Android (Kotlin) モバイル アプリでユーザーをサインイン させ、外部テナントにアプリを登録する」の手順に従います。 次の手順を完了していることを確認します。
    • アプリケーションを登録します。
    • パブリック クライアントとネイティブ認証フローを有効にします。
    • API アクセス許可を付与します。
    • ユーザー フローを作成します。
    • アプリをユーザー フローに関連付けます。
  • Android プロジェクト。 Android プロジェクトがない場合は、作成します。

MSAL 依存関係を追加する

  1. Android Studio でプロジェクトを開くか、新しいプロジェクトを作成します。

  2. アプリケーションの build.gradle を開き、次の依存関係を追加します。

    allprojects {
        repositories {
            //Needed for com.microsoft.device.display:display-mask library
            maven {
                url 'https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1'
                name 'Duo-SDK-Feed'
            }
            mavenCentral()
            google()
        }
    }
    //...
    
    dependencies { 
        implementation 'com.microsoft.identity.client:msal:6.+'
        //...
    }
    
  3. Android Studio で、[ File>Sync Project with Gradle Files] を選択します。

構成ファイルを作成する

JSON 構成設定を使用して、アプリケーション (クライアント) ID などの必要なテナント識別子を MSAL SDK に渡します。

構成ファイルを作成するには、次の手順に従います。

  1. Android Studio のプロジェクト ウィンドウで、app\src\main\res に移動します。

  2. res を右クリックし、新規>Directory を選択します。 新しいディレクトリの名前に「raw」と入力し、[OK] を選択します。

  3. app\src\main\r\raw で、auth_config_native_auth.jsonという名前の新しい JSON ファイルを作成します。

  4. auth_config_native_auth.json ファイルに、次の MSAL 構成を追加します。

    { 
      "client_id": "Enter_the_Application_Id_Here", 
      "authorities": [ 
        { 
          "type": "CIAM", 
          "authority_url": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/Enter_the_Tenant_Subdomain_Here.onmicrosoft.com/" 
        } 
      ], 
      "challenge_types": ["oob"], 
      "logging": { 
        "pii_enabled": false, 
        "log_level": "INFO", 
        "logcat_enabled": true 
      } 
    } 
     //...
    
  5. 次のプレースホルダーを、Microsoft Entra 管理センターから取得したテナント値に置き換えます。

    • Enter_the_Application_Id_Here プレースホルダーを、先ほど登録したアプリのアプリケーション (クライアント) ID に置き換えます。
    • Enter_the_Tenant_Subdomain_Hereをディレクトリ (テナント) サブドメインに置き換えます。 たとえば、テナントのプライマリ ドメインが contoso.onmicrosoft.com の場合は、contoso を使用します。 テナント名がない場合は、テナントの詳細を読み取る方法を確認してください

    チャレンジの種類は値の一覧であり、アプリはサポートされている認証方法について Microsoft Entra に通知するために使用します。

    • 電子メールワンタイム パスコードを使用したサインアップとサインイン フローの場合は、 ["oob"]を使用します。
    • 電子メールとパスワードを使用したサインアップフローとサインイン フローでは、 ["oob","password"]を使用します。
    • セルフサービス パスワード リセット (SSPR) の場合は、 ["oob"]を使用します。

    その他の チャレンジの種類について説明します。

省略可能: ログ記録の構成

SDK がログを出力できるように、ログ記録コールバックを作成して、アプリの作成時にログ記録を有効にします。

import com.microsoft.identity.client.Logger

fun initialize(context: Context) {
        Logger.getInstance().setExternalLogger { tag, logLevel, message, containsPII ->
            Logs.append("$tag $logLevel $message")
        }
    }

ロガーを構成するには、構成ファイルにセクションを追加する必要があります。 auth_config_native_auth.json

    //...
   { 
     "logging": { 
       "pii_enabled": false, 
       "log_level": "INFO", 
       "logcat_enabled": true 
     } 
   } 
    //...
  1. logcat_enabled: ライブラリのログ機能を有効にします。
  2. pii_enabled: 個人データまたは組織データを含むメッセージをログに記録するかどうかを指定します。 false に設定すると、ログには個人データは含まれません。 true に設定すると、ログに個人データが含まれる場合があります。
  3. log_level: 有効にするログ記録のレベルを決定するために使用します。 Android では、次のログ レベルがサポートされています。
    1. エラー
    2. 警告:
    3. 情報
    4. 冗長

MSAL ログの詳細については、「 Android 用 MSAL でのログ記録」を参照してください。

ネイティブ認証 MSAL SDK インスタンスを作成する

onCreate()メソッドで MSAL インスタンスを作成し、アプリがネイティブ認証を介してテナントに対して認証を実行できるようにします。 createNativeAuthPublicClientApplication() メソッドは、authClientというインスタンスを返します。 前に作成した JSON 構成ファイルをパラメーターとして渡します。

    //...
    authClient = PublicClientApplication.createNativeAuthPublicClientApplication( 
        this, 
        R.raw.auth_config_native_auth 
    )
    //...

コードは次のスニペットのようになります。

    class MainActivity : AppCompatActivity() { 
        private lateinit var authClient: INativeAuthPublicClientApplication 
 
        override fun onCreate(savedInstanceState: Bundle?) { 
            super.onCreate(savedInstanceState) 
            setContentView(R.layout.activity_main) 
 
            authClient = PublicClientApplication.createNativeAuthPublicClientApplication( 
                this, 
                R.raw.auth_config_native_auth 
            ) 
            getAccountState() 
        } 
 
        private fun getAccountState() {
            CoroutineScope(Dispatchers.Main).launch {
                val accountResult = authClient.getCurrentAccount()
                when (accountResult) {
                    is GetAccountResult.AccountFound -> {
                        displaySignedInState(accountResult.resultValue)
                    }
                    is GetAccountResult.NoAccountFound -> {
                        displaySignedOutState()
                    }
                }
            }
        } 
 
        private fun displaySignedInState(accountResult: AccountState) { 
            val accountName = accountResult.getAccount().username 
            val textView: TextView = findViewById(R.id.accountText) 
            textView.text = "Cached account found: $accountName" 
        } 
 
        private fun displaySignedOutState() { 
            val textView: TextView = findViewById(R.id.accountText) 
            textView.text = "No cached account found" 
        } 
    } 
  • getCurrentAccount() を使用し、オブジェクトを返す accountResult によってキャッシュされたアカウントを取得します。
  • アカウントが永続化状態にある場合は、 GetAccountResult.AccountFound を使用してサインイン状態を表示します。
  • それ以外の場合は、 GetAccountResult.NoAccountFound を使用してサインアウト状態を表示します。

必ず import ステートメントを含めます。 Android Studio では、自動的に import ステートメントが含められます。

次のステップ