Självstudie: Logga in användare och anropa Microsoft Graph API från ett Android-programTutorial: Sign in users and call the Microsoft Graph API from an Android application

I den här självstudien skapar du en Android-app som integreras med Microsoft Identity Platform för att logga in användare och hämta en åtkomsttoken för att anropa API: et för Microsoft Graph.In this tutorial, you build an Android app that integrates with the Microsoft identity platform to sign in users and get an access token to call the Microsoft Graph API.

När du har slutfört den här självstudien accepterar programmet inloggnings uppgifter för personliga Microsoft-konton (inklusive outlook.com, live.com och andra) samt arbets-eller skol konton från alla företag eller organisationer som använder Azure Active Directory.When you've completed this tutorial, your application will accept sign-ins of personal Microsoft accounts (including outlook.com, live.com, and others) as well as work or school accounts from any company or organization that uses Azure Active Directory.

I de här självstudierna har duIn this tutorial:

  • Skapa ett Android-PROG-projekt i Android StudioCreate an Android app project in Android Studio
  • Registrera appen i Azure PortalRegister the app in the Azure portal
  • Lägg till kod som stöd för användar inloggning och utloggningAdd code to support user sign-in and sign-out
  • Lägg till kod för att anropa API: et för Microsoft GraphAdd code to call the Microsoft Graph API
  • Testa appenTest the app

FörutsättningarPrerequisites

  • Android Studio 3.5 +Android Studio 3.5+

Hur den här självstudien fungerarHow this tutorial works

Visar hur exempel appen som genereras av den här själv studie kursen fungerar

Appen i den här självstudien kommer att logga in användare och hämta data för deras räkning.The app in this tutorial will sign in users and get data on their behalf. Dessa data kommer att nås via en skyddad API (Microsoft Graph-API) som kräver auktorisering och skyddas av Microsoft Identity Platform.This data will be accessed through a protected API (Microsoft Graph API) that requires authorization and is protected by the Microsoft identity platform.

Mer specifikt:More specifically:

  • Din app kommer att logga in användaren antingen via en webbläsare eller Microsoft Authenticator och Intune-företagsportal.Your app will sign in the user either through a browser or the Microsoft Authenticator and Intune Company Portal.
  • Slutanvändaren kommer att godkänna de behörigheter som programmet har begärt.The end user will accept the permissions your application has requested.
  • Din app kommer att utfärda en åtkomsttoken för Microsoft Graph-API: et.Your app will be issued an access token for the Microsoft Graph API.
  • Åtkomsttoken tas med i HTTP-begäran till webb-API: et.The access token will be included in the HTTP request to the web API.
  • Bearbeta Microsoft Graph svaret.Process the Microsoft Graph response.

I det här exemplet används Microsoft Authentication Library för Android (MSAL) för att implementera autentisering: com. Microsoft. Identity. client.This sample uses the Microsoft Authentication Library for Android (MSAL) to implement Authentication: com.microsoft.identity.client.

MSAL förnyar automatiskt token, leverera enkel inloggning (SSO) mellan andra appar på enheten och hanterar kontona.MSAL will automatically renew tokens, deliver single sign-on (SSO) between other apps on the device, and manage the Account(s).

Den här självstudien visar förenklade exempel på hur du arbetar med MSAL för Android.This tutorial demonstrates simplified examples of working with MSAL for Android. För enkelhetens skull använder den bara ett enda konto läge.For simplicity, it uses Single Account Mode only. Om du vill utforska mer komplexa scenarier, se ett slutfört kod exempel för arbete på GitHub.To explore more complex scenarios, see a completed working code sample on GitHub.

Skapa ett projektCreate a project

Om du inte redan har ett Android-program följer du dessa steg för att skapa ett nytt projekt.If you do not already have an Android application, follow these steps to set up a new project.

  1. Öppna Android Studio och välj starta ett nytt Android Studio-projekt.Open Android Studio, and select Start a new Android Studio project.
  2. Välj grundläggande aktivitet och välj Nästa.Select Basic Activity and select Next.
  3. Namnge ditt program.Name your application.
  4. Spara paket namnet.Save the package name. Du kommer att ange den senare i Azure Portal.You will enter it later into the Azure portal.
  5. Ändra språket från Kotlin till Java.Change the language from Kotlin to Java.
  6. Ange lägsta API-nivå till API 19 eller högre och klicka på Slutför.Set the Minimum API level to API 19 or higher, and click Finish.
  7. I projektvyn väljer du projekt i list rutan för att Visa käll-och icke-källfiler, öppna app/build. gradle och Ställ in targetSdkVersion28 .In the project view, choose Project in the dropdown to display source and non-source project files, open app/build.gradle and set targetSdkVersion to 28.

Integrera med Microsoft Authentication LibraryIntegrate with the Microsoft Authentication Library

Registrera ditt programRegister your application

  1. Logga in på Azure-portalen.Sign in to the Azure portal.

  2. Om du har åtkomst till flera klienter använder du filtret för katalog + prenumeration i den översta menyn för att välja den klient som du vill registrera ett program i.

  3. Sök efter och välj Azure Active Directory.Search for and select Azure Active Directory.

  4. Under Hantera väljer du Appregistreringar > ny registrering.Under Manage, select App registrations > New registration.

  5. Ange ett namn för ditt program.Enter a Name for your application. Användare av appen kan se det här namnet och du kan ändra det senare.Users of your app might see this name, and you can change it later.

  6. Välj Register (Registrera).Select Register.

  7. Under Hantera väljer du autentisering > Lägg till en plattforms- > Android.Under Manage, select Authentication > Add a platform > Android.

  8. Ange ditt projekts paket namn.Enter your project's Package Name. Om du har hämtat koden är det här värdet com.azuresamples.msalandroidapp .If you downloaded the code, this value is com.azuresamples.msalandroidapp.

  9. I avsnittet Signature hash på sidan Konfigurera din Android-app väljer du skapa en hash för utvecklings signaturen.In the Signature hash section of the Configure your Android app page, select Generating a development Signature Hash. och kopiera det kommando kommando som ska användas för din plattform.and copy the KeyTool command to use for your platform.

    KeyTool.exe installeras som en del av Java Development Kit (JDK).KeyTool.exe is installed as part of the Java Development Kit (JDK). Du måste också installera OpenSSL-verktyget för att köra kommandot.You must also install the OpenSSL tool to execute the KeyTool command. Läs Android- dokumentationen om hur du genererar en nyckel för mer information.Refer to the Android documentation on generating a key for more information.

  10. Ange signatur-hashen som genereras av ett-verktyg.Enter the Signature hash generated by KeyTool.

  11. Välj Konfigurera och spara MSAL-konfigurationen som visas på sidan med Android-konfiguration så att du kan ange den när du konfigurerar appen senare.Select Configure and save the MSAL Configuration that appears in the Android configuration page so you can enter it when you configure your app later.

  12. Välj Klar.Select Done.

Konfigurera ditt programConfigure your application

  1. I Android Studio projekt fönstret navigerar du till app\src\main\res.In Android Studio's project pane, navigate to app\src\main\res.

  2. Högerklicka på res och välj ny > katalog.Right-click res and choose New > Directory. Ange raw som det nya katalog namnet och klicka på OK.Enter raw as the new directory name and click OK.

  3. I app > src > main > res > RAW skapar du en ny JSON-fil med namnet auth_config_single_account.json och klistrar in MSAL-konfigurationen som du sparade tidigare.In app > src > main > res > raw, create a new JSON file called auth_config_single_account.json and paste the MSAL Configuration that you saved earlier.

    Under omdirigerings-URI: n klistrar du in:Below the redirect URI, paste:

      "account_mode" : "SINGLE",
    

    Konfigurations filen bör likna följande exempel:Your config file should resemble this example:

    {
      "client_id" : "0984a7b6-bc13-4141-8b0d-8f767e136bb7",
      "authorization_user_agent" : "DEFAULT",
      "redirect_uri" : "msauth://com.azuresamples.msalandroidapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D",
      "broker_redirect_uri_registered" : true,
      "account_mode" : "SINGLE",
      "authorities" : [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount",
            "tenant_id": "common"
          }
        }
      ]
    }
    

    Den här kursen visar bara hur du konfigurerar en app i ett enda konto läge.This tutorial only demonstrates how to configure an app in Single Account mode. Läs dokumentationen om du vill ha mer information om Single vs. Multiple Account mode och Konfigurera appenView the documentation for more information on single vs. multiple account mode and configuring your app

  4. > > >\ \ **** Lägg till BrowserTabActivity aktiviteten under program texten i appens huvudAndroidManifest.xml.In app > src > main > AndroidManifest.xml, add the BrowserTabActivity activity below to the application body. Med den här posten kan Microsoft anropa programmet igen när autentiseringen är klar:This entry allows Microsoft to call back to your application after it completes the authentication:

    <!--Intent filter to capture System Browser or Authenticator calling back to our app after sign-in-->
    <activity
        android:name="com.microsoft.identity.client.BrowserTabActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="msauth"
                android:host="Enter_the_Package_Name"
                android:path="/Enter_the_Signature_Hash" />
        </intent-filter>
    </activity>
    

    Ersätt det paket namn som du registrerade i Azure Portal för android:host= värdet.Substitute the package name you registered in the Azure portal for the android:host= value. Ersätt den nyckel-hash som du registrerade i Azure Portal för android:path= värdet.Substitute the key hash you registered in the Azure portal for the android:path= value. Signaturens hash ska inte vara URL-kodad.The Signature Hash should not be URL encoded. Se till att det finns en rad / i början av signaturens hash.Ensure that there is a leading / at the beginning of your Signature Hash.

    "Paket namn" du ersätter android:host värdet med bör se ut ungefär så här: "com. azuresamples. msalandroidapp".The "Package Name" you will replace the android:host value with should look similar to: "com.azuresamples.msalandroidapp". "Signaturens hash" du ersätter ditt android:path värde med bör se ut ungefär så här: "/1wIqXSqBj7w + h11ZifsnqwgyKrY =".The "Signature Hash" you will replace your android:path value with should look similar to: "/1wIqXSqBj7w+h11ZifsnqwgyKrY=".

    Du kommer också att kunna hitta dessa värden på bladet autentisering i din app-registrering.You will also be able to find these values in the Authentication blade of your app registration. Observera att omdirigerings-URI: n ser ut ungefär så här: "msauth://com.azuresamples.msalandroidapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D".Note that your redirect URI will look similar to: "msauth://com.azuresamples.msalandroidapp/1wIqXSqBj7w%2Bh11ZifsnqwgyKrY%3D". Medan signatur-hashen är URL-kodad i slutet av det här värdet ska signaturens hash inte vara URL-kodat i ditt android:path värde.While the Signature Hash is URL encoded at the end of this value, the Signature Hash should not be URL encoded in your android:path value.

Använd MSALUse MSAL

Lägg till MSAL i projektetAdd MSAL to your project

  1. I fönstret Android Studio projekt navigerar du till app > src > build. gradle och lägger till följande:In the Android Studio project window, navigate to app > src > build.gradle and add the following:

    repositories{
        jcenter()
    }
    dependencies{
        implementation 'com.microsoft.identity.client:msal:2.+'
        implementation 'com.microsoft.graph:microsoft-graph:1.5.+'
    }
    packagingOptions{
        exclude("META-INF/jersey-module-version")
    }
    

    Mer om Microsoft Graph SDKMore on the Microsoft Graph SDK

Nödvändiga importerRequired Imports

Lägg till följande överst i appens > src > main > Java > com. exempel (yourapp) > MainActivity. javaAdd the following to the top of app > src > main> java > com.example(yourapp) > MainActivity.java

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.gson.JsonObject;
import com.microsoft.graph.authentication.IAuthenticationProvider; //Imports the Graph sdk Auth interface
import com.microsoft.graph.concurrency.ICallback;
import com.microsoft.graph.core.ClientException;
import com.microsoft.graph.http.IHttpRequest;
import com.microsoft.graph.models.extensions.*;
import com.microsoft.graph.requests.extensions.GraphServiceClient;
import com.microsoft.identity.client.AuthenticationCallback; // Imports MSAL auth methods
import com.microsoft.identity.client.*;
import com.microsoft.identity.client.exception.*;

Instansiera PublicClientApplicationInstantiate PublicClientApplication

Initiera variablerInitialize Variables

private final static String[] SCOPES = {"Files.Read"};
/* Azure AD v2 Configs */
final static String AUTHORITY = "https://login.microsoftonline.com/common";
private ISingleAccountPublicClientApplication mSingleAccountApp;

private static final String TAG = MainActivity.class.getSimpleName();

/* UI & Debugging Variables */
Button signInButton;
Button signOutButton;
Button callGraphApiInteractiveButton;
Button callGraphApiSilentButton;
TextView logTextView;
TextView currentUserTextView;

onCreateonCreate

I- MainActivity klassen, se följande onCreate ()-metod för att INSTANSIERA MSAL med hjälp av SingleAccountPublicClientApplication .Inside the MainActivity class, refer to the following onCreate() method to instantiate MSAL using the SingleAccountPublicClientApplication.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    initializeUI();

    PublicClientApplication.createSingleAccountPublicClientApplication(getApplicationContext(),
            R.raw.auth_config_single_account, new IPublicClientApplication.ISingleAccountApplicationCreatedListener() {
                @Override
                public void onCreated(ISingleAccountPublicClientApplication application) {
                    mSingleAccountApp = application;
                    loadAccount();
                }
                @Override
                public void onError(MsalException exception) {
                    displayError(exception);
                }
            });
}

loadAccountloadAccount

//When app comes to the foreground, load existing account to determine if user is signed in
private void loadAccount() {
    if (mSingleAccountApp == null) {
        return;
    }

    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);
        }
    });
}

initializeUIinitializeUI

Lyssna på knappar och anropa metoder eller Logga fel i enlighet med detta.Listen to buttons and call methods or log errors accordingly.

private void initializeUI(){
        signInButton = findViewById(R.id.signIn);
        callGraphApiSilentButton = findViewById(R.id.callGraphSilent);
        callGraphApiInteractiveButton = findViewById(R.id.callGraphInteractive);
        signOutButton = findViewById(R.id.clearCache);
        logTextView = findViewById(R.id.txt_log);
        currentUserTextView = findViewById(R.id.current_user);

        //Sign in user
        signInButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                if (mSingleAccountApp == null) {
                    return;
                }
                mSingleAccountApp.signIn(MainActivity.this, null, SCOPES, getAuthInteractiveCallback());
            }
        });

        //Sign out user
        signOutButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mSingleAccountApp == null){
                    return;
                }
                mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback() {
                    @Override
                    public void onSignOut() {
                        updateUI(null);
                        performOperationOnSignOut();
                    }
                    @Override
                    public void onError(@NonNull MsalException exception){
                        displayError(exception);
                    }
                });
            }
        });

        //Interactive
        callGraphApiInteractiveButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mSingleAccountApp == null) {
                    return;
                }
                mSingleAccountApp.acquireToken(MainActivity.this, SCOPES, getAuthInteractiveCallback());
            }
        });

        //Silent
        callGraphApiSilentButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mSingleAccountApp == null){
                    return;
                }
                mSingleAccountApp.acquireTokenSilentAsync(SCOPES, AUTHORITY, getAuthSilentCallback());
            }
        });
    }

Viktigt

Om du loggar ut med MSAL tas all känd information om en användare bort från programmet, men användaren kan fortfarande ha en aktiv session på sin enhet.Signing out with MSAL removes all known information about a user from the application, but the user will still have an active session on their device. Om användaren försöker logga in igen kan de se inloggnings gränssnittet, men kanske inte behöver ange sina autentiseringsuppgifter på nytt eftersom sessionen fortfarande är aktiv.If the user attempts to sign in again they may see sign-in UI, but may not need to reenter their credentials because the device session is still active.

getAuthInteractiveCallbackgetAuthInteractiveCallback

Motringning används för interaktiva begär Anden.Callback used for interactive requests.

private AuthenticationCallback getAuthInteractiveCallback() {
    return new AuthenticationCallback() {
        @Override
        public void onSuccess(IAuthenticationResult authenticationResult) {
            /* Successfully got a token, use it to call a protected resource - MSGraph */
            Log.d(TAG, "Successfully authenticated");
            /* Update UI */
            updateUI(authenticationResult.getAccount());
            /* call graph */
            callGraphAPI(authenticationResult);
        }

        @Override
        public void onError(MsalException exception) {
            /* Failed to acquireToken */
            Log.d(TAG, "Authentication failed: " + exception.toString());
            displayError(exception);
        }
        @Override
        public void onCancel() {
            /* User canceled the authentication */
            Log.d(TAG, "User cancelled login.");
        }
    };
}

getAuthSilentCallbackgetAuthSilentCallback

Motringning används för tysta begär AndenCallback used for silent requests

private SilentAuthenticationCallback getAuthSilentCallback() {
    return new SilentAuthenticationCallback() {
        @Override
        public void onSuccess(IAuthenticationResult authenticationResult) {
            Log.d(TAG, "Successfully authenticated");
            callGraphAPI(authenticationResult);
        }
        @Override
        public void onError(MsalException exception) {
            Log.d(TAG, "Authentication failed: " + exception.toString());
            displayError(exception);
        }
    };
}

Anropa Microsoft Graph APICall Microsoft Graph API

Följande kod visar hur du anropar GraphAPI med hjälp av Graph SDK.The following code demonstrates how to call the GraphAPI using the Graph SDK.

callGraphAPIcallGraphAPI

private void callGraphAPI(IAuthenticationResult authenticationResult) {

    final String accessToken = authenticationResult.getAccessToken();

    IGraphServiceClient graphClient =
            GraphServiceClient
                    .builder()
                    .authenticationProvider(new IAuthenticationProvider() {
                        @Override
                        public void authenticateRequest(IHttpRequest request) {
                            Log.d(TAG, "Authenticating request," + request.getRequestUrl());
                            request.addHeader("Authorization", "Bearer " + accessToken);
                        }
                    })
                    .buildClient();
    graphClient
            .me()
            .drive()
            .buildRequest()
            .get(new ICallback<Drive>() {
                @Override
                public void success(final Drive drive) {
                    Log.d(TAG, "Found Drive " + drive.id);
                    displayGraphResult(drive.getRawObject());
                }

                @Override
                public void failure(ClientException ex) {
                    displayError(ex);
                }
            });
}

Lägga till användargränssnittAdd UI

AktivitetActivity

Om du vill modellera ditt användar gränssnitt från den här självstudien tillhandahåller följande metoder en guide för att uppdatera text och lyssna på knappar.If you would like to model your UI off this tutorial, the following methods provide a guide to updating text and listening to buttons.

updateUIupdateUI

Aktivera/inaktivera knappar baserat på inloggnings status och ange text.Enable/disable buttons based on sign-in state and set text.

private void updateUI(@Nullable final IAccount account) {
    if (account != null) {
        signInButton.setEnabled(false);
        signOutButton.setEnabled(true);
        callGraphApiInteractiveButton.setEnabled(true);
        callGraphApiSilentButton.setEnabled(true);
        currentUserTextView.setText(account.getUsername());
    } else {
        signInButton.setEnabled(true);
        signOutButton.setEnabled(false);
        callGraphApiInteractiveButton.setEnabled(false);
        callGraphApiSilentButton.setEnabled(false);
        currentUserTextView.setText("");
        logTextView.setText("");
    }
}

displayErrordisplayError

private void displayError(@NonNull final Exception exception) {
       logTextView.setText(exception.toString());
   }

displayGraphResultdisplayGraphResult

private void displayGraphResult(@NonNull final JsonObject graphResponse) {
      logTextView.setText(graphResponse.toString());
  }

performOperationOnSignOutperformOperationOnSignOut

Metod för att uppdatera text i UI för att avspegla utloggning.Method to update text in UI to reflect sign out.

private void performOperationOnSignOut() {
    final String signOutText = "Signed Out.";
    currentUserTextView.setText("");
    Toast.makeText(getApplicationContext(), signOutText, Toast.LENGTH_SHORT)
            .show();
}

LayoutLayout

Exempel activity_main.xml fil för att Visa knappar och text rutor.Sample activity_main.xml file to display buttons and text boxes.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:weightSum="10">

        <Button
            android:id="@+id/signIn"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="5"
            android:gravity="center"
            android:text="Sign In"/>

        <Button
            android:id="@+id/clearCache"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="5"
            android:gravity="center"
            android:text="Sign Out"
            android:enabled="false"/>

    </LinearLayout>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal">

        <Button
            android:id="@+id/callGraphInteractive"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="5"
            android:text="Get Graph Data Interactively"
            android:enabled="false"/>

        <Button
            android:id="@+id/callGraphSilent"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="5"
            android:text="Get Graph Data Silently"
            android:enabled="false"/>
    </LinearLayout>

    <TextView
        android:text="Getting Graph Data..."
        android:textColor="#3f3f3f"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:id="@+id/graphData"
        android:visibility="invisible"/>

    <TextView
        android:id="@+id/current_user"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="20dp"
        android:layout_weight="0.8"
        android:text="Account info goes here..." />

    <TextView
        android:id="@+id/txt_log"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_marginTop="20dp"
        android:layout_weight="0.8"
        android:text="Output goes here..." />
</LinearLayout>

Testa appenTest your app

Lokal körningRun locally

Bygg och distribuera appen till en test enhet eller emulator.Build and deploy the app to a test device or emulator. Du bör kunna logga in och hämta token för Azure AD eller personliga Microsoft-konton.You should be able to sign in and get tokens for Azure AD or personal Microsoft accounts.

När du har loggat in visar appen de data som returneras från Microsoft Graph /me slut punkten.After you sign in, the app will display the data returned from the Microsoft Graph /me endpoint. PR 4PR 4

Första gången användaren loggar in i din app uppmanas de av Microsoft-identiteten att godkänna de behörigheter som begärs.The first time any user signs into your app, they will be prompted by Microsoft identity to consent to the permissions requested. Vissa Azure AD-klienter har inaktiverat användar medgivande som kräver att administratörer samtycker till alla användares räkning.Some Azure AD tenants have disabled user consent which requires admins to consent on behalf of all users. För att stödja det här scenariot måste du antingen skapa en egen klient eller få administratörs tillåtelse.To support this scenario, you will either need to create your own tenant or receive admin consent.

Rensa resurserClean up resources

Ta bort app-objektet som du skapade i steget Registrera ditt program när de inte längre behövs.When no longer needed, delete the app object that you created in the Register your application step.

Hjälp och supportHelp and support

Om du behöver hjälp, vill rapportera ett problem eller vill veta mer om dina support alternativ, se Hjälp och support för utvecklare.If you need help, want to report an issue, or want to learn about your support options, see Help and support for developers.

Nästa stegNext steps

Lär dig mer om att skapa mobilappar som anropar skyddade webb-API: er i vår scenario serie med flera delar.Learn more about building mobile apps that call protected web APIs in our multi-part scenario series.