Tutoriel : Préparer votre application Android pour l’authentification native

Ce tutoriel montre comment ajouter l’infrastructure de Kit de développement logiciel (SDK) pour l’authentification native de Bibliothèque d’authentification Microsoft (MSAL) à votre application Android.

Dans ce tutoriel, vous allez apprendre à :

  • Ajoutez des dépendances MSAL.
  • Créez un fichier de configuration .
  • Créez une instance du Kit de développement logiciel (SDK).

Prérequis

Ajoutez des dépendances MSAL

  1. Ouvrez votre projet dans Android Studio ou créez un projet.

  2. Ouvrez le build.gradle de votre application et ajoutez les dépendances suivantes :

    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()
        }
    }
    
  3. Ouvrez le build.gradle de votre application et ajoutez les dépendances suivantes :

    implementation 'com.microsoft.identity.client:msal:5.+'
    
  4. Sélectionnez Fichier>Synchronisation du projet avec les fichiers Gradle.

Création d’un fichier de configuration

Vous transmettez des identificateurs de locataire pertinents, tels que l’ID d’application (client), à la bibliothèque MSAL via les paramètres de configuration. Ceci est réalisé à l’aide d’un fichier JSON.

Suivez ces étapes pour créer un fichier de configuration :

  1. Dans le volet de projet d’Android Studio, accédez à app\src\main\res.

  2. Cliquez avec le bouton droit sur res, puis choisissez Nouveau>Répertoire. Entrez raw en tant que nouveau nom de répertoire, puis sélectionnez OK.

  3. Dans application>src>principal>res>brut, créez un fichier JSON appelé auth_config_native_auth.json.

  4. Dans le fichier auth_config_native_auth.json, ajoutez les configurations MSAL suivantes :

    { 
      "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. Remplacez les valeurs suivantes par les valeurs du centre d’administration Microsoft Entra :

    • Trouvez la valeur Enter_the_Application_Id_Here et remplacez-la par l’ID d’application (client) de l’application inscrite précédemment.
    • Trouvez la valeur Enter_the_Tenant_Subdomain_Here et remplacez-la par le sous-domaine du Répertoire (locataire). Par exemple, si votre domaine principal du locataire est contoso.onmicrosoft.com, utilisez contoso. Si vous ne disposez pas du nom de votre locataire, découvrez de quelle manière consulter les détails de votre locataire.

Optionnel : configuration de la journalisation

Activez la journalisation lors de la création de l’application en créant un rappel de journalisation. Sans méthode de journalisation, la bibliothèque ne pourra pas générer de journaux d’activité.

import com.microsoft.identity.client.Logger

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

Pour configurer l’enregistreur d’événements, une section de journalisation doit être ajoutée dans le fichier de configuration :

   { 
     "logging": { 
       "pii_enabled": false, 
       "log_level": "INFO", 
       "logcat_enabled": true 
     } 
   } 
  1. logcat_enabled : active la fonctionnalité de journalisation de la bibliothèque.
  2. pii_enabled : indique si les messages contenant des données personnelles ou organisationnelles sont journalisés. Quand la valeur est false, les journaux ne contiennent pas de données personnelles. Lorsque la valeur est true, les journaux peuvent contenir des données personnelles.
  3. log_level : utilisé pour déterminer le niveau de journalisation à activer. Les niveaux de journalisation pris en charge sont les suivants :
    1. ERROR
    2. WARNING
    3. INFO
    4. DÉTAILLÉ

Pour plus d’informations sur la journalisation MSAL, consultez Journalisation dans MSAL pour Android.

Créez une instance du Kit de développement logiciel (SDK)

Dans la méthode onCreate(), créez une instance de bibliothèque MSAL pour pouvoir appliquer une logique d’authentification et interagir avec notre locataire via des API d’authentification natives. La méthode createNativeAuthPublicClientApplication() retourne une instance appelée authClient. Le fichier de configuration JSON que nous avons créé précédemment dans le tutoriel est passé en tant que paramètre.

Le compte mis en cache peut être récupéré via getCurrentAccount(), qui retourne un objet AccountResult si un compte pour cette application a été trouvé dans la persistance ou GetAccountResult.NoAccountFound si ce n’est pas le cas. Votre code doit ressembler à ce qui suit :

    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(accountState: 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" 
        } 
    } 

N’oubliez pas d’ajouter les instructions d’importation, Android Studio le fait automatiquement pour vous (sur Mac ou Windows, sélectionnez Alt + Entrée pour chaque erreur détectée par l’éditeur de code).

Étapes suivantes