Bagikan melalui


Tutorial: Menyiapkan aplikasi ponsel Android Anda untuk autentikasi asli

Berlaku untuk: Lingkaran putih dengan simbol X abu-abu. Penyewa Angkatan Kerja Lingkaran hijau dengan simbol tanda centang putih. Penyewa Eksternal (pelajari lebih lanjut)

Tutorial ini menunjukkan cara menambahkan SDK autentikasi asli Microsoft Authentication Library (MSAL) ke aplikasi seluler Android.

Di tutorial ini, Anda akan:

  • Tambahkan dependensi MSAL.
  • Buat file konfigurasi.
  • Buat instans MSAL SDK.

Prasyarat

Menambahkan dependensi MSAL

  1. Buka proyek Anda di Android Studio atau buat proyek baru.

  2. Buka build.gradle aplikasi Anda dan tambahkan dependensi berikut:

    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. Di Android Studio, pilih File>Sinkronkan Proyek dengan Gradle Files.

Membuat file konfigurasi

Anda meneruskan pengidentifikasi penyewa yang diperlukan, seperti ID aplikasi (klien), ke MSAL SDK melalui pengaturan konfigurasi JSON.

Gunakan langkah-langkah ini untuk membuat file konfigurasi:

  1. Di panel proyek Android Studio, navigasikan ke app\src\main\res.

  2. Klik kanan res dan pilih Baru>Direktori. Masukkan raw sebagai nama direktori baru dan pilih OK.

  3. Di app\src\main\res\raw, buat file JSON baru yang disebut auth_config_native_auth.json.

  4. Dalam file auth_config_native_auth.json, tambahkan konfigurasi MSAL berikut:

    { 
      "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. Ganti placeholder berikut dengan nilai penyewa yang Anda peroleh dari pusat admin Microsoft Entra.

    • Ganti placeholder Enter_the_Application_Id_Here dengan ID aplikasi klien dari app yang Anda daftarkan sebelumnya.
    • Ganti Enter_the_Tenant_Subdomain_Here dengan subdomain direktori (tenant). Misalnya, jika domain utama penyewa Anda contoso.onmicrosoft.com, gunakan contoso. Jika Anda tidak memiliki nama penyewa, pelajari cara membaca detail penyewa Anda.

    Jenis tantangan adalah daftar nilai, yang digunakan aplikasi untuk memberi tahu Microsoft Entra tentang metode autentikasi yang didukungnya.

    • Untuk alur pendaftaran dan masuk dengan menggunakan kode sandi sekali pakai yang dikirim melalui email, gunakan ["oob"].
    • Untuk proses pendaftaran dan masuk dengan email dan kata sandi, gunakan ["oob","password"].
    • Untuk pengaturan ulang kata sandi mandiri (SSPR), gunakan ["oob"].

    Ketahui lebih lanjut jenis tantangan.

Opsional: Konfigurasi pengelogan

Aktifkan pengelogan pada pembuatan aplikasi dengan membuat panggilan balik pengelogan, sehingga SDK dapat menghasilkan log.

import com.microsoft.identity.client.Logger

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

Untuk mengonfigurasi pencatat, Anda perlu menambahkan bagian dalam file konfigurasi, auth_config_native_auth.json:

    //...
   { 
     "logging": { 
       "pii_enabled": false, 
       "log_level": "INFO", 
       "logcat_enabled": true 
     } 
   } 
    //...
  1. logcat_enabled: Mengaktifkan fungsionalitas pengelogan pustaka.
  2. pii_enabled: Menentukan apakah pesan yang berisi data pribadi, atau data organisasi dicatat. Saat diatur ke false, log tidak akan berisi data pribadi. Ketika diatur ke true, log mungkin berisi data pribadi.
  3. log_level: Gunakan untuk memutuskan tingkat pengelogan mana yang akan diaktifkan. Android mendukung tingkat log berikut:
    1. KESALAHAN
    2. PERINGATAN
    3. INFORMASI
    4. PENYEDEHANAAN KATA

Untuk informasi selengkapnya tentang pengelogan MSAL, lihat Pengelogan di MSAL untuk Android.

Membuat instans MSAL SDK autentikasi bawaan

Dalam metode onCreate(), buat instans MSAL sehingga aplikasi dapat melakukan autentikasi dengan penyewa Anda melalui autentikasi asli. Metode createNativeAuthPublicClientApplication() mengembalikan instans yang disebut authClient. Teruskan file konfigurasi JSON yang Anda buat sebelumnya sebagai parameter.

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

Kode Anda akan terlihat mirip dengan cuplikan berikut:

    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" 
        } 
    } 
  • Ambil akun cache dengan menggunakan getCurrentAccount(), yang mengembalikan objek, accountResult.
  • Jika akun ditemukan dalam persistensi, gunakan GetAccountResult.AccountFound untuk menampilkan status masuk.
  • Jika tidak, gunakan GetAccountResult.NoAccountFound untuk menampilkan status sudah keluar.

Pastikan Anda menyertakan pernyataan impor. Android Studio harus menyertakan perintah impor secara otomatis untuk Anda.

Langkah berikutnya