Rychlý start: Přihlášení uživatelů a volání rozhraní Microsoft Graph API z aplikace pro Android
Vítejte! Pravděpodobně to není stránka, kterou jste očekávali. Momentálně pracujeme na opravě, ale prozatím použijte následující odkaz– měli byste přejít na správný článek:
Rychlý start: Přihlášení uživatelů a volání Microsoft Graphu z aplikace pro Android
Omlouváme se za nepříjemnosti a vážíme si vaší trpělivosti, zatímco pracujeme na vyřešení tohoto problému.
V tomto rychlém startu stáhnete a spustíte ukázku kódu, která předvádí, jak se aplikace pro Android může přihlásit uživatele a získat přístupový token pro volání rozhraní Microsoft Graph API.
Podívejte se, jak ukázka funguje pro ilustraci.
Aplikace musí být reprezentovány objektem aplikace v Microsoft Entra ID, aby platforma Microsoft Identity Platform mohla vaší aplikaci poskytovat tokeny.
Požadavky
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Android Studio
- Android 16 a novější
Krok 1: Konfigurace aplikace na webu Azure Portal
Aby ukázka kódu v tomto rychlém startu fungovala, přidejte identifikátor URI přesměrování kompatibilní s zprostředkovatelem ověřování.
Vaše aplikace je nakonfigurovaná s těmito atributy.
Krok 2: Stažení projektu
Spusťte projekt pomocí Android Studia.
Krok 3: Aplikace je nakonfigurovaná a připravená ke spuštění
Nakonfigurovali jsme váš projekt s hodnotami vlastností vaší aplikace a je připravený ke spuštění. Ukázková aplikace se spustí na obrazovce Režimu jednoho účtu. Ve výchozím nastavení je k dispozici výchozí obor user.read, který se používá při čtení vlastních dat profilu během volání rozhraní Microsoft Graph API. Ve výchozím nastavení je k dispozici adresa URL pro volání rozhraní Microsoft Graph API. Pokud chcete, můžete obě tyto možnosti změnit.
Pomocí nabídky aplikace můžete změnit režimy jednoho a více účtů.
V režimu jednoho účtu se přihlaste pomocí pracovního nebo domácího účtu:
- Výběrem možnosti Získat data grafu interaktivně vyzvete uživatele k zadání přihlašovacích údajů. V dolní části obrazovky se zobrazí výstup volání rozhraní Microsoft Graph API.
- Po přihlášení vyberte Získat data grafu bezobslužně , aby se volání rozhraní Microsoft Graph API bez výzvy uživatele k zadání přihlašovacích údajů znovu zobrazilo. V dolní části obrazovky se zobrazí výstup volání rozhraní Microsoft Graph API.
V režimu více účtů můžete stejný postup zopakovat. Kromě toho můžete odebrat přihlášený účet, který také odebere tokeny uložené v mezipaměti pro tento účet.
Poznámka:
Enter_the_Supported_Account_Info_Here
Jak ukázka funguje
Kód je uspořádaný do fragmentů, které ukazují, jak napsat jednu a více účtů aplikace MSAL. Soubory kódu jsou uspořádány takto:
Soubor | Demonstruje |
---|---|
MainActivity | Spravuje uživatelské rozhraní. |
MSGraphRequestWrapper | Volá rozhraní Microsoft Graph API pomocí tokenu poskytovaného knihovnou MSAL. |
MultipleAccountModeFragment | Inicializuje aplikaci s více účty, načte uživatelský účet a získá token pro volání rozhraní Microsoft Graph API. |
SingleAccountModeFragment | Inicializuje aplikaci s jedním účtem, načte uživatelský účet a získá token pro volání rozhraní Microsoft Graph API. |
res/auth_config_multiple_account.json | Konfigurační soubor s více účty |
res/auth_config_single_account.json | Konfigurační soubor s jedním účtem |
Gradle Scripts/build.grade (Module:app) | Tady jsou přidány závislosti knihovny MSAL. |
Teď se na tyto soubory podíváme podrobněji a v každém z nich označíme kód specifický pro MSAL.
Přidání KNIHOVNY MSAL do aplikace
MSAL (com.microsoft.identity.client) je knihovna, která slouží k přihlašování uživatelů a vyžádání tokenů používaných pro přístup k rozhraní API chráněnému platformou Microsoft Identity Platform. Gradle 3.0+ nainstaluje knihovnu při přidání následujícího příkazu do gradle Scripts>build.gradle (modul: aplikace) v části Závislosti:
dependencies {
...
implementation 'com.microsoft.identity.client:msal:2.+'
...
}
To dává Gradle pokyn ke stažení a sestavení MSAL z mavenu central.
Musíte také přidat odkazy na maven do části úložiště allprojects>build.gradle (module: aplikace), například takto:
allprojects {
repositories {
mavenCentral()
google()
mavenLocal()
maven {
url 'https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1'
}
maven {
name "vsts-maven-adal-android"
url "https://identitydivision.pkgs.visualstudio.com/_packaging/AndroidADAL/maven/v1"
credentials {
username System.getenv("ENV_VSTS_MVN_ANDROIDADAL_USERNAME") != null ? System.getenv("ENV_VSTS_MVN_ANDROIDADAL_USERNAME") : project.findProperty("vstsUsername")
password System.getenv("ENV_VSTS_MVN_ANDROIDADAL_ACCESSTOKEN") != null ? System.getenv("ENV_VSTS_MVN_ANDROIDADAL_ACCESSTOKEN") : project.findProperty("vstsMavenAccessToken")
}
}
jcenter()
}
}
Importy MSAL
Importy, které jsou relevantní pro knihovnu MSAL, jsou com.microsoft.identity.client.*
. Uvidíte import > com.microsoft.identity.client.PublicClientApplication;
například, který obor názvů třídy PublicClientApplication
představuje vaši veřejnou klientskou aplikaci.
SingleAccountModeFragment.java
Tento soubor ukazuje, jak vytvořit jednu aplikaci MSAL účtu a volat rozhraní Microsoft Graph API.
Jednoúčelové aplikace používají jenom jeden uživatel. Můžete mít například jenom jeden účet, pomocí kterého se přihlašujete k mapovací aplikaci.
Inicializace MSAL s jedním účtem
V auth_config_single_account.json
souboru se onCreateView()
vytvoří jeden účet PublicClientApplication
pomocí konfiguračních informací uložených auth_config_single_account.json
v souboru. Takto inicializujete knihovnu MSAL pro použití v aplikaci MSAL s jedním účtem:
...
// Creates a PublicClientApplication object with res/raw/auth_config_single_account.json
PublicClientApplication.createSingleAccountPublicClientApplication(getContext(),
R.raw.auth_config_single_account,
new IPublicClientApplication.ISingleAccountApplicationCreatedListener() {
@Override
public void onCreated(ISingleAccountPublicClientApplication application) {
/**
* This test app assumes that the app is only going to support one account.
* This requires "account_mode" : "SINGLE" in the config json file.
**/
mSingleAccountApp = application;
loadAccount();
}
@Override
public void onError(MsalException exception) {
displayError(exception);
}
});
Přihlášení uživatele
V SingleAccountModeFragment.java
kódu pro přihlášení uživatele je v initializeUI()
obslužné rutině signInButton
kliknutí.
Před pokusem o získání tokenů zavolejte signIn()
. signIn()
chová se, jako by acquireToken()
byl volána, což vede k interaktivní výzvě, aby se uživatel přihlásil.
Přihlášení uživatele je asynchronní operace. Zpětné volání se předá volání, které volá rozhraní Microsoft Graph API a aktualizuje uživatelské rozhraní, jakmile se uživatel přihlásí:
mSingleAccountApp.signIn(getActivity(), null, getScopes(), getAuthInteractiveCallback());
Odhlášení uživatele
V SingleAccountModeFragment.java
kódu pro odhlášení uživatele je v initializeUI()
obslužné rutině signOutButton
kliknutí. Odhlášení uživatele je asynchronní operace. Odhlášení uživatele také vymaže mezipaměť tokenů pro tento účet. Jakmile se uživatelský účet odhlásí, vytvoří se zpětné volání, které aktualizuje uživatelské rozhraní:
mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback() {
@Override
public void onSignOut() {
updateUI(null);
performOperationOnSignOut();
}
@Override
public void onError(@NonNull MsalException exception) {
displayError(exception);
}
});
Interaktivní nebo tiché získání tokenu
Pokud chcete uživateli prezentovat co nejmenší počet výzev, obvykle získáte token bezobslužně. Pokud dojde k chybě, zkuste se interaktivně dostat k tokenu. Při prvním volání signIn()
aplikace funguje efektivně jako volání acquireToken()
, který vyzve uživatele k zadání přihlašovacích údajů.
V některých situacích, kdy se uživateli může zobrazit výzva k výběru účtu, zadání přihlašovacích údajů nebo vyjádření souhlasu s oprávněními, která vaše aplikace požadovala, jsou:
- Při prvním přihlášení uživatele k aplikaci
- Pokud uživatel resetuje heslo, bude muset zadat svoje přihlašovací údaje.
- Pokud je souhlas odvolán
- Pokud vaše aplikace explicitně vyžaduje souhlas
- Když aplikace žádá o přístup k prostředku poprvé
- Pokud se vyžadují vícefaktorové ověřování nebo jiné zásady podmíněného přístupu
Kód, který získá token interaktivně, což je s uživatelským rozhraním, které bude zahrnovat uživatele, je v SingleAccountModeFragment.java
, v initializeUI()
, v obslužné rutině callGraphApiInteractiveButton
kliknutí:
/**
* If acquireTokenSilent() returns an error that requires an interaction (MsalUiRequiredException),
* invoke acquireToken() to have the user resolve the interrupt interactively.
*
* Some example scenarios are
* - password change
* - the resource you're acquiring a token for has a stricter set of requirement than your Single Sign-On refresh token.
* - you're introducing a new scope which the user has never consented for.
**/
mSingleAccountApp.acquireToken(getActivity(), getScopes(), getAuthInteractiveCallback());
Pokud už je uživatel přihlášený, acquireTokenSilentAsync()
umožňuje aplikacím bezobslužně vyžadovat tokeny, jak je znázorněno v >initializeUI()
obslužné rutině callGraphApiSilentButton
kliknutí:
/**
* Once you've signed the user in,
* you can perform acquireTokenSilent to obtain resources without interrupting the user.
**/
mSingleAccountApp.acquireTokenSilentAsync(getScopes(), AUTHORITY, getAuthSilentCallback());
Načtení účtu
Kód pro načtení účtu je v SingleAccountModeFragment.java
loadAccount()
. Načtení účtu uživatele je asynchronní operace, takže zpětná volání, která se mají zpracovat, když se účet načte, změní nebo dojde k chybě, předá knihovně MSAL. Následující kód také zpracovává onAccountChanged()
, ke kterému dochází při odebrání účtu, uživatel se změní na jiný účet atd.
private void loadAccount() {
...
mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback() {
@Override
public void onAccountLoaded(@Nullable IAccount activeAccount) {
// You can use the account data to update your UI or your app database.
updateUI(activeAccount);
}
@Override
public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable IAccount currentAccount) {
if (currentAccount == null) {
// Perform a cleanup task as the signed-in account changed.
performOperationOnSignOut();
}
}
@Override
public void onError(@NonNull MsalException exception) {
displayError(exception);
}
});
Volání Microsoft Graphu
Když je uživatel přihlášený, volání Microsoft Graphu se provede prostřednictvím požadavku HTTP, který callGraphAPI()
je definován v SingleAccountModeFragment.java
. Tato funkce je obálka, která zjednodušuje ukázku tím, že provádí některé úlohy, jako je získání přístupového tokenu z authenticationResult
volání a zabalení volání MSGraphRequestWrapper a zobrazení výsledků volání.
private void callGraphAPI(final IAuthenticationResult authenticationResult) {
MSGraphRequestWrapper.callGraphAPIUsingVolley(
getContext(),
graphResourceTextView.getText().toString(),
authenticationResult.getAccessToken(),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
/* Successfully called graph, process data and send to UI */
...
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
...
}
});
}
auth_config_single_account.json
Toto je konfigurační soubor pro aplikaci MSAL, která používá jeden účet.
Vysvětlení těchto polí najdete v tématu Vysvětlení konfiguračního souboru MSAL pro Android.
Všimněte si přítomnosti "account_mode" : "SINGLE"
aplikace, která tuto aplikaci nakonfiguruje tak, aby používala jeden účet.
"client_id"
je předem nakonfigurovaný tak, aby používal registraci objektu aplikace, kterou microsoft udržuje.
"redirect_uri"
je předem nakonfigurovaný tak, aby používal podpisový klíč, který je součástí ukázky kódu.
{
"client_id" : "00001111-aaaa-2222-bbbb-3333cccc4444",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "msauth://com.azuresamples.msalandroidapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D",
"account_mode" : "SINGLE",
"broker_redirect_uri_registered": true,
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount",
"tenant_id": "common"
}
}
]
}
MultipleAccountModeFragment.java
Tento soubor ukazuje, jak vytvořit aplikaci MSAL s více účty a volat rozhraní Microsoft Graph API.
Příkladem aplikace s více účty je poštovní aplikace, která umožňuje pracovat s více uživatelskými účty, jako je pracovní účet a osobní účet.
Inicializace MSAL s více účty
V souboru je v onCreateView()
objektu MultipleAccountModeFragment.java
aplikace s více účty (IMultipleAccountPublicClientApplication
) vytvořen pomocí konfiguračních informací uložených v :auth_config_multiple_account.json file
// Creates a PublicClientApplication object with res/raw/auth_config_multiple_account.json
PublicClientApplication.createMultipleAccountPublicClientApplication(getContext(),
R.raw.auth_config_multiple_account,
new IPublicClientApplication.IMultipleAccountApplicationCreatedListener() {
@Override
public void onCreated(IMultipleAccountPublicClientApplication application) {
mMultipleAccountApp = application;
loadAccounts();
}
@Override
public void onError(MsalException exception) {
...
}
});
Vytvořený MultipleAccountPublicClientApplication
objekt je uložen v členské proměnné třídy, aby bylo možné jej použít k interakci s knihovnou MSAL k získání tokenů a načtení a odebrání uživatelského účtu.
Načtení účtu
K výběru účtu, který se má použít pro operace MSAL, obvykle volá getAccounts()
více aplikací účtů. Kód pro načtení účtu je v MultipleAccountModeFragment.java
souboru , v loadAccounts()
. Načtení účtu uživatele je asynchronní operace. Zpětné volání tedy zpracovává situace, kdy se účet načte, změní nebo dojde k chybě.
/**
* Load currently signed-in accounts, if there's any.
**/
private void loadAccounts() {
if (mMultipleAccountApp == null) {
return;
}
mMultipleAccountApp.getAccounts(new IPublicClientApplication.LoadAccountsCallback() {
@Override
public void onTaskCompleted(final List<IAccount> result) {
// You can use the account data to update your UI or your app database.
accountList = result;
updateUI(accountList);
}
@Override
public void onError(MsalException exception) {
displayError(exception);
}
});
}
Interaktivní nebo tiché získání tokenu
V některých situacích, kdy se uživateli může zobrazit výzva k výběru účtu, zadání přihlašovacích údajů nebo vyjádření souhlasu s oprávněními, která vaše aplikace požadovala, jsou:
- Při prvním přihlášení k aplikaci
- Pokud uživatel resetuje heslo, bude muset zadat svoje přihlašovací údaje.
- Pokud je souhlas odvolán
- Pokud vaše aplikace explicitně vyžaduje souhlas
- Když aplikace žádá o přístup k prostředku poprvé
- Pokud se vyžadují vícefaktorové ověřování nebo jiné zásady podmíněného přístupu
Více aplikací účtů by obvykle mělo interaktivně získávat tokeny, to znamená s uživatelským rozhraním, které zahrnuje uživatele s voláním acquireToken()
. Kód pro interaktivní získání tokenu je v souboru initializeUI> ()
v MultipleAccountModeFragment.java
obslužné rutině callGraphApiInteractiveButton
kliknutí:
/**
* Acquire token interactively. It will also create an account object for the silent call as a result (to be obtained by > getAccount()).
*
* If acquireTokenSilent() returns an error that requires an interaction,
* invoke acquireToken() to have the user resolve the interrupt interactively.
*
* Some example scenarios are
* - password change
* - the resource you're acquiring a token for has a stricter set of requirement than your SSO refresh token.
* - you're introducing a new scope which the user has never consented for.
**/
mMultipleAccountApp.acquireToken(getActivity(), getScopes(), getAuthInteractiveCallback());
Aplikace by neměly vyžadovat, aby se uživatel při každém vyžádání tokenu přihlásil. Pokud je uživatel již přihlášený, acquireTokenSilentAsync()
umožňuje aplikacím požadovat tokeny bez výzvy uživatele, jak je znázorněno v MultipleAccountModeFragment.java
souboru, vinitializeUI()
obslužné rutině callGraphApiSilentButton
kliknutí:
/**
* Performs acquireToken without interrupting the user.
*
* This requires an account object of the account you're obtaining a token for.
* (can be obtained via getAccount()).
*/
mMultipleAccountApp.acquireTokenSilentAsync(getScopes(),
accountList.get(accountListSpinner.getSelectedItemPosition()),
AUTHORITY,
getAuthSilentCallback());
Odebrání účtu
Kód pro odebrání účtu a všechny tokeny uložené v mezipaměti pro tento účet jsou v MultipleAccountModeFragment.java
souboru v initializeUI()
obslužné rutině tlačítka pro odebrání účtu. Před odebráním účtu potřebujete objekt účtu, který získáte z metod MSAL jako getAccounts()
a acquireToken()
. Vzhledem k tomu, že odebrání účtu je asynchronní operace, onRemoved
zadává se zpětná volání pro aktualizaci uživatelského rozhraní.
/**
* Removes the selected account and cached tokens from this app (or device, if the device is in shared mode).
**/
mMultipleAccountApp.removeAccount(accountList.get(accountListSpinner.getSelectedItemPosition()),
new IMultipleAccountPublicClientApplication.RemoveAccountCallback() {
@Override
public void onRemoved() {
...
/* Reload account asynchronously to get the up-to-date list. */
loadAccounts();
}
@Override
public void onError(@NonNull MsalException exception) {
displayError(exception);
}
});
auth_config_multiple_account.json
Toto je konfigurační soubor pro aplikaci MSAL, která používá více účtů.
Vysvětlení různých polí najdete v tématu Vysvětlení konfiguračního souboru MSAL pro Android.
Na rozdíl od konfiguračního souboru auth_config_single_account.json má "account_mode" : "MULTIPLE"
tento konfigurační soubor místo "account_mode" : "SINGLE"
toho, že se jedná o aplikaci s více účty.
"client_id"
je předem nakonfigurovaný tak, aby používal registraci objektu aplikace, kterou microsoft udržuje.
"redirect_uri"
je předem nakonfigurovaný tak, aby používal podpisový klíč, který je součástí ukázky kódu.
{
"client_id" : "00001111-aaaa-2222-bbbb-3333cccc4444",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "msauth://com.azuresamples.msalandroidapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D",
"account_mode" : "MULTIPLE",
"broker_redirect_uri_registered": true,
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount",
"tenant_id": "common"
}
}
]
}
Nápověda a podpora
Pokud potřebujete pomoc, chcete nahlásit problém nebo se chcete dozvědět o možnostech podpory, přečtěte si nápovědu a podporu pro vývojáře.
Další kroky
Přejděte k kurzu pro Android, ve kterém vytvoříte aplikaci pro Android, která získá přístupový token z platformy Microsoft Identity Platform a použije ji k volání rozhraní Microsoft Graph API.