Samouczek: przygotowywanie aplikacji mobilnej systemu Android do uwierzytelniania natywnego
W tym samouczku pokazano, jak dodać natywny zestaw SDK uwierzytelniania biblioteki Microsoft Authentication Library (MSAL) do aplikacji mobilnej systemu Android.
Z tego samouczka dowiesz się, jak wykonywać następujące czynności:
- Dodaj zależności biblioteki MSAL.
- Utwórz plik konfiguracji.
- Utwórz wystąpienie zestawu MSAL SDK.
Wymagania wstępne
- Jeśli jeszcze tego nie zrobiono, postępuj zgodnie z instrukcjami w artykule Logowanie użytkowników w przykładowej aplikacji mobilnej systemu Android (Kotlin) przy użyciu uwierzytelniania natywnego i rejestrowania aplikacji w dzierżawie zewnętrznej. Upewnij się, że wykonasz następujące kroki:
- Rejestrowanie aplikacji.
- Włącz przepływy uwierzytelniania publicznego i natywnego klienta.
- Udzielanie uprawnień interfejsu API.
- Tworzenie przepływu użytkownika.
- Skojarz aplikację z przepływem użytkownika.
- Projekt systemu Android. Jeśli nie masz projektu systemu Android, utwórz go.
Dodawanie zależności biblioteki MSAL
Otwórz projekt w programie Android Studio lub utwórz nowy projekt.
Otwórz aplikację
build.gradle
i dodaj następujące zależności: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.+' //... }
W programie Android Studio wybierz pozycję Projekt synchronizacji plików>z plikami Gradle.
Tworzenie pliku konfiguracji
Wymagane identyfikatory dzierżawy, takie jak identyfikator aplikacji (klienta), są przekazywane do zestawu SDK biblioteki MSAL za pomocą ustawienia konfiguracji JSON.
Wykonaj następujące kroki, aby utworzyć plik konfiguracji:
W okienku projektu programu Android Studio przejdź do pozycji app\src\main\res.
Kliknij prawym przyciskiem myszy pozycję res i wybierz pozycję Nowy>katalog. Wprowadź
raw
jako nazwę nowego katalogu i wybierz przycisk OK.W pliku app\src\main\res\raw utwórz nowy plik JSON o nazwie
auth_config_native_auth.json
.auth_config_native_auth.json
W pliku dodaj następujące konfiguracje biblioteki 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 } } //...
Zastąp następujące symbole zastępcze wartościami dzierżawy uzyskanymi z centrum administracyjnego firmy Microsoft Entra:
- Zastąp
Enter_the_Application_Id_Here
symbol zastępczy identyfikatorem aplikacji (klienta) zarejestrowanej wcześniej aplikacji. - Zastąp element
Enter_the_Tenant_Subdomain_Here
poddomeną katalogu (dzierżawy). Jeśli na przykład domena podstawowa dzierżawy tocontoso.onmicrosoft.com
, użyj poleceniacontoso
. Jeśli nie masz swojej nazwy dzierżawy, dowiedz się, jak odczytywać szczegóły dzierżawy.
Typy wyzwań to lista wartości, których aplikacja używa do powiadamiania firmy Microsoft Entra o obsługiwanej przez nią metodzie uwierzytelniania.
- W przypadku przepływów rejestracji i logowania przy użyciu jednorazowego kodu dostępu poczty e-mail użyj polecenia
["oob"]
. - W przypadku przepływów rejestracji i logowania przy użyciu poczty e-mail i hasła użyj polecenia
["oob","password"]
. - W przypadku samoobsługowego resetowania hasła (SSPR) użyj polecenia
["oob"]
.
Dowiedz się więcej o typach wyzwań.
- Zastąp
Opcjonalnie: Konfiguracja rejestrowania
Włącz rejestrowanie podczas tworzenia aplikacji, tworząc wywołanie zwrotne rejestrowania, aby zestaw SDK mógł wyświetlać dzienniki wyjściowe.
import com.microsoft.identity.client.Logger
fun initialize(context: Context) {
Logger.getInstance().setExternalLogger { tag, logLevel, message, containsPII ->
Logs.append("$tag $logLevel $message")
}
}
Aby skonfigurować rejestrator, należy dodać sekcję w pliku konfiguracji: auth_config_native_auth.json
//...
{
"logging": {
"pii_enabled": false,
"log_level": "INFO",
"logcat_enabled": true
}
}
//...
- logcat_enabled: włącza funkcję rejestrowania biblioteki.
- pii_enabled: określa, czy komunikaty zawierające dane osobowe, czy dane organizacyjne są rejestrowane. W przypadku ustawienia wartości false dzienniki nie będą zawierać danych osobowych. Po ustawieniu wartości true dzienniki mogą zawierać dane osobowe.
- log_level: użyj go, aby zdecydować, który poziom rejestrowania ma być włączony. System Android obsługuje następujące poziomy dziennika:
- BŁĄD
- OSTRZEŻENIE
- INFO
- PEŁNY
Aby uzyskać więcej informacji na temat rejestrowania biblioteki MSAL, zobacz Rejestrowanie w bibliotece MSAL dla systemu Android.
Tworzenie wystąpienia zestawu SDK biblioteki MSAL uwierzytelniania natywnego
W metodzie onCreate()
utwórz wystąpienie biblioteki MSAL, aby aplikacja mogła przeprowadzić uwierzytelnianie z dzierżawą za pomocą uwierzytelniania natywnego. Metoda createNativeAuthPublicClientApplication()
zwraca wystąpienie o nazwie authClient
. Przekaż utworzony wcześniej plik konfiguracji JSON jako parametr.
//...
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
this,
R.raw.auth_config_native_auth
)
//...
Kod powinien wyglądać podobnie do poniższego fragmentu kodu:
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"
}
}
- Pobierz buforowane konto przy użyciu
getCurrentAccount()
obiektu , który zwraca obiektaccountResult
. - Jeśli konto zostanie znalezione w stanie trwałości, użyj polecenia
GetAccountResult.AccountFound
, aby wyświetlić stan logowania. - W przeciwnym razie użyj polecenia
GetAccountResult.NoAccountFound
, aby wyświetlić stan wylogowania.
Upewnij się, że dołączysz instrukcje importowania. Program Android Studio powinien automatycznie dołączać instrukcje importowania.