Tutorial: Vorbereiten Ihrer mobilen Android-App für die native Authentifizierung
In diesem Tutorial wird veranschaulicht, wie Sie einer mobilen Android-App das Microsoft Authentication Library (MSAL)-SDK für die native Authentifizierung hinzufügen.
In diesem Tutorial lernen Sie Folgendes:
- Hinzufügen von MSAL-Abhängigkeiten
- Erstellen Sie eine Konfigurationsdatei.
- Erstellen der MSAL-SDK-Instanz
Voraussetzungen
- Falls noch nicht geschehen, folgen Sie den Anweisungen in Anmelden von Benutzern in einer mobilen Android-Beispiel-App (Kotlin) mithilfe der nativen Authentifizierung, und registrieren Sie eine App in Ihrem externen Mandanten. Führen Sie unbedingt die folgenden Schritte aus:
- Registrieren einer Anwendung.
- Aktivieren Sie öffentliche Client- und native Authentifizierungsabläufe.
- Gewähren von API-Berechtigungen
- Erstellen Sie einen Benutzerflow.
- Zuordnen der Anwendung zum Benutzerflow
- Ein Android-Projekt Wenn Sie kein Android-Projekt haben, erstellen Sie eines.
Hinzufügen von MSAL-Abhängigkeiten
Öffnen Sie Ihr Projekt in Android Studio, oder erstellen Sie ein neues Projekt.
Öffnen Sie das
build.gradle
-Element Ihrer Anwendung, und fügen Sie die folgenden Abhängigkeiten hinzu: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:5.+' //... }
Klicken Sie in Android Studio auf File>Sync Project with Gradle Files (Datei > Projekt mit Gradle-Dateien synchronisieren).
Erstellen einer Konfigurationsdatei
Die erforderlichen Mandantenbezeichner, wie z. B. die Anwendungs-ID (Client), werden dem MSAL-SDK über eine JSON-Konfigurationsdatei übergeben.
Führen Sie diese Schritte aus, um eine Konfigurationsdatei zu erstellen:
Navigieren Sie im Projektbereich von Android Studio zu app\src\main\res.
Klicken Sie mit der rechten Maustaste auf res, und wählen Sie New>Directory („Neu“ > „Verzeichnis“) aus. Geben Sie
raw
als neuen Verzeichnisnamen ein, und wählen Sie OK.Erstellen Sie in app\src\main\res\raw eine neue JSON-Datei namens
auth_config_native_auth.json
.Fügen Sie in der Datei
auth_config_native_auth.json
die folgenden MSAL-Konfigurationen hinzu:{ "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 } } //...
Ersetzen Sie die folgenden Platzhalter durch Ihre Mandantenwerte, die Sie im Microsoft Entra Admin Center finden:
- Ersetzen Sie
Enter_the_Application_Id_Here
durch die Anwendungs-ID (Client) der zuvor von Ihnen registrierten App. - Ersetzen Sie
Enter_the_Tenant_Subdomain_Here
durch die Unterdomäne des Verzeichnisses (Mandant). Wenn Ihre primäre Mandantendomäne beispielsweisecontoso.onmicrosoft.com
lautet, verwenden Siecontoso
. Wenn Sie Ihren Mandantennamen nicht kennen, erfahren Sie hier, wie Sie Ihre Mandantendetails auslesen.
Aufforderungstypen sind Listen von Werten, die von der App verwendet werden, um Microsoft Entra über die unterstützte Authentifizierungsmethode zu benachrichtigen.
- Verwenden Sie für Flows zur Registrierung und Anmeldung mit E-Mail-Adresse und einem Einmal-Passcode
["oob"]
. - Verwenden Sie für Flows zur Registrierung und Anmeldung mit E-Mail-Adresse und Kennwort
["oob","password"]
. - Verwenden Sie für die Self-Service-Kennwortzurücksetzung (SSPR)
["oob"]
.
Erfahren Sie mehr über Aufforderungstypen.
- Ersetzen Sie
Optional: Konfiguration der Protokollierung
Aktivieren Sie die Protokollierung bei der App-Erstellung, indem Sie einen Protokollierungsrückruf erstellen, damit das SDK Protokolle ausgeben kann.
import com.microsoft.identity.client.Logger
fun initialize(context: Context) {
Logger.getInstance().setExternalLogger { tag, logLevel, message, containsPII ->
Logs.append("$tag $logLevel $message")
}
}
Um die Protokollierung zu konfigurieren, müssen Sie einen Abschnitt in der Konfigurationsdatei auth_config_native_auth.json
hinzufügen:
//...
{
"logging": {
"pii_enabled": false,
"log_level": "INFO",
"logcat_enabled": true
}
}
//...
- logcat_enabled: Aktiviert die Protokollierungsfunktionalität der Bibliothek.
- pii_enabled: Gibt an, ob Nachrichten, die personenbezogene Daten oder Organisationsdaten enthalten, protokolliert werden. Wenn dieser Wert auf „false“ festgelegt ist, enthalten Protokolle keine personenbezogenen Daten. Ist er auf „true“ festgelegt, können die Protokolle personenbezogene Daten enthalten.
- log_level: Wird verwendet, um zu entscheiden, welche Protokollebene aktiviert werden soll. Android unterstützt die folgenden Protokollebenen:
- FEHLER
- WARNING
- INFO
- VERBOSE
Weitere Informationen zur MSAL-Protokollierung finden Sie unter Protokollierung in MSAL für Android.
Erstellen der MSAL-SDK-Instanz für die native Authentifizierung
Erstellen Sie in der onCreate()
-Methode eine MSAL-Instanz, damit die App die Authentifizierung bei Ihrem Mandanten über die native Authentifizierung durchführen kann. Die createNativeAuthPublicClientApplication()
-Methode gibt eine Instanz mit der Bezeichnung authClient
zurück. Übergeben Sie die zuvor erstellte JSON-Konfigurationsdatei als Parameter.
//...
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
this,
R.raw.auth_config_native_auth
)
//...
Ihr Code sollte in etwa wie folgt aussehen:
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"
}
}
- Rufen Sie das zwischengespeicherte Konto mithilfe der
getCurrentAccount()
-Methode ab, die dasaccountResult
-Objekt zurückgibt. - Wenn ein Konto gefunden wurde, verwenden Sie
GetAccountResult.AccountFound
, um den Anmeldestatus anzuzeigen. - Verwenden Sie andernfalls
GetAccountResult.NoAccountFound
, um den Abmeldestatus anzuzeigen.
Stellen Sie sicher, dass Sie die Importanweisungen hinzufügen. Android Studio sollte die Importanweisungen automatisch enthalten.