Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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 na to, jak funguje ukázka 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í se 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. Výchozí obor, user.read, je ve výchozím nastavení poskytován, 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:
- Vyberte Interaktivní získání dat grafu a 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 bez vyzvání pro volání rozhraní Microsoft Graph API, aniž by se uživateli znovu zobrazila výzva k zadání přihlašovacích údajů. 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 |
|---|---|
| Hlavní aktivita | 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. |
| RežimJednohoÚčtuFragment | 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 pro jeden účet |
| Gradle Scripts/build.gradle (Modul:app) | Závislosti knihovny MSAL jsou přidány zde. |
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í 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 allprojects>repositories souboru build.gradle (Module: app), 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.*. Například uvidíte import > com.microsoft.identity.client.PublicClientApplication;, což je obor názvů pro třídu PublicClientApplication, která 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.
Jednouživatelské aplikace používá pouze 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 a onCreateView() je vytvořen jeden účet PublicClientApplication pomocí konfiguračních informací uložených v souboru auth_config_single_account.json. 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 obslužné rutině kliknutí je kód pro přihlášení uživatele v initializeUI().
Před pokusem o získání tokenů zavolejte signIn() .
signIn() se chová, jako by acquireToken() byla volána, čímž dojde k interaktivní výzvě k přihlášení uživatele.
Přihlášení uživatele je asynchronní operace. Předává se zpětné 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
Ve SingleAccountModeFragment.java kódu pro odhlášení uživatele je ve initializeUI() obslužné rutiny pro 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. Aplikace při prvním volání signIn() 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 pro získání tokenu interaktivně, které zahrnuje uživatelské rozhraní pro interakci s uživatelem, je v SingleAccountModeFragment.java, v initializeUI(), v obslužné rutině kliknutí callGraphApiInteractiveButton.
/**
* 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 tiše vyžadovat tokeny, jak je uvedeno v obslužné rutině kliknutí >initializeUI()callGraphApiSilentButton:
/**
* 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 a loadAccount(). Načítání účtu uživatele je asynchronní operace, proto se k knihovně MSAL předávají callbacky pro zpracování načtení účtu, změny nebo chyby. Následující kód také zpracovává onAccountChanged(), k čemuž dochází při odebrání účtu, když uživatel přejde 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);
}
});
Volejte Microsoft Graph
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álkou, která zjednodušuje příklad tím, že provádí některé úlohy, jako je získání přístupového tokenu z authenticationResult, zabalení volání do 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 MSAL aplikaci s mnoha účty a jak volat 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 pro více účtů
V souboru MultipleAccountModeFragment.java ve onCreateView() je objekt 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í uživatelů 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
Aplikace s více účty by obvykle měly získávat tokeny interaktivním způsobem, to znamená s uživatelským rozhraním, pomocí volání na acquireToken(). Kód pro interaktivní získání tokenu je v souboru MultipleAccountModeFragment.java v initializeUI> (), v obslužné rutině kliknutí callGraphApiInteractiveButton:
/**
* 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, aniž by uživatele vyzvala, jak je znázorněno v souboru MultipleAccountModeFragment.java, v obslužné rutině kliknutí initializeUI():
/**
* 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, je poskytnuto zpětné volání onRemoved 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.