Zelfstudie: Uw mobiele Android-app voorbereiden op systeemeigen verificatie
Van toepassing op: Workforce-tenants
Externe tenants (meer informatie)
Deze zelfstudie laat zien hoe u de systeemeigen VERIFICATIE-SDK (Microsoft Authentication Library) (MSAL) toevoegt aan een mobiele Android-app.
In deze zelfstudie leert u het volgende:
- MSAL-afhankelijkheden toevoegen.
- Maak een configuratiebestand.
- Maak een MSAL SDK-exemplaar.
Voorwaarden
- Als u dat nog niet hebt gedaan, volgt u de instructies in Gebruikers aanmelden in een voorbeeld van een mobiele Android-app (Kotlin) met behulp van systeemeigen verificatie en registreert u een app in uw externe tenant. Zorg ervoor dat u de volgende stappen uitvoert:
- Een toepassing registreren.
- Schakel openbare client- en native authenticatiestromen in.
- API-machtigingen verlenen.
- Maak een gebruikersstroom.
- Koppel de app aan de gebruikersstroom.
- Een Android-project. Als u geen Android-project hebt, maakt u het.
MSAL-afhankelijkheden toevoegen
Open uw project in Android Studio of maak een nieuw project.
Open de
build.gradle
van uw toepassing en voeg de volgende afhankelijkheden toe: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.+' //... }
Selecteer in Android Studio Bestand>Synchroniseer project met Gradle-bestanden.
Een configuratiebestand maken
U geeft de vereiste tenant-id's, zoals de toepassings-id (client), door aan de MSAL SDK via een JSON-configuratie-instelling.
Gebruik deze stappen om een configuratiebestand te maken:
Navigeer in het projectvenster van Android Studio naar app\src\main\res.
Klik met de rechtermuisknop op res en selecteer nieuwe>Directory. Voer
raw
in als de nieuwe mapnaam en selecteer OK-.Maak in app\src\main\res\raween nieuw JSON-bestand met de naam
auth_config_native_auth.json
.Voeg in het bestand
auth_config_native_auth.json
de volgende MSAL-configuraties toe:{ "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 } } //...
Vervang de volgende tijdelijke aanduidingen door uw tenantwaarden die u hebt verkregen via het Microsoft Entra-beheercentrum:
- Vervang de tijdelijke aanduiding
Enter_the_Application_Id_Here
door de toepassings-id (client) van de app die u eerder hebt geregistreerd. - Vervang de
Enter_the_Tenant_Subdomain_Here
door het subdomein map (tenant). Als uw primaire tenantdomein bijvoorbeeld iscontoso.onmicrosoft.com
, gebruikt ucontoso
. Als u uw tenantnaam niet hebt, leert u hoe u uw tenantgegevens kunt lezen.
De uitdagingstypen zijn een lijst met waarden die door de app worden gebruikt om Microsoft Entra op de hoogte te stellen van de verificatiemethode die wordt ondersteund.
- Gebruik
["oob"]
voor aanmeldings- en aanmeldingsstromen met eenmalige wachtwoordcode voor e-mail. - Gebruik
["oob","password"]
voor aanmeldings- en aanmeldingsstromen met e-mail en wachtwoord. - Gebruik
["oob"]
voor zelfbediend wachtwoordherstel (SSPR).
Lees meer over uitdagingtypes.
- Vervang de tijdelijke aanduiding
Optioneel: Configuratie van logboekregistratie
Schakel logboekregistratie in bij het maken van apps door een callback voor logboekregistratie te maken, zodat de SDK logboeken kan uitvoeren.
import com.microsoft.identity.client.Logger
fun initialize(context: Context) {
Logger.getInstance().setExternalLogger { tag, logLevel, message, containsPII ->
Logs.append("$tag $logLevel $message")
}
}
Om het logboek te configureren, moet u een sectie in het configuratiebestand toevoegen auth_config_native_auth.json
:
//...
{
"logging": {
"pii_enabled": false,
"log_level": "INFO",
"logcat_enabled": true
}
}
//...
- logcat_enabled: Hiermee schakelt u de logfunctionaliteit van de bibliotheek in.
- pii_enabled: hiermee geeft u op of berichten met persoonlijke gegevens of organisatiegegevens worden geregistreerd. Wanneer deze is ingesteld op onwaar, bevatten logboeken geen persoonlijke gegevens. Als deze waarde is ingesteld op waar, kunnen de logboeken persoonlijke gegevens bevatten.
-
log_level: gebruik dit om te bepalen welk niveau van logboekregistratie moet worden ingeschakeld. Android ondersteunt de volgende logboekniveaus:
- FOUT
- WAARSCHUWING
- INFO
- LANGDRADIG
Voor meer informatie over MSAL-logboeken, zie Logboeken in MSAL voor Android.
Een MSAL SDK-exemplaar voor systeemeigen verificatie maken
Maak in de onCreate()
methode een MSAL-exemplaar, zodat de app verificatie met uw tenant kan uitvoeren via systeemeigen verificatie. De methode createNativeAuthPublicClientApplication()
retourneert een exemplaar met de naam authClient
. Geef het JSON-configuratiebestand door dat u eerder hebt gemaakt als parameter.
//...
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
this,
R.raw.auth_config_native_auth
)
//...
Uw code moet er ongeveer uitzien als het volgende codefragment:
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"
}
}
- Haal het account in de cache op met behulp van de
getCurrentAccount()
, die een object retourneert,accountResult
. - Als er een account in persistentie is gevonden, gebruikt u
GetAccountResult.AccountFound
om een aangemelde status weer te geven. - Gebruik anders
GetAccountResult.NoAccountFound
om een afgemelde status weer te geven.
Zorg ervoor dat u de importinstructies opneemt. Android Studio moet automatisch de importinstructies voor u bevatten.