Chamar a API do Microsoft Graph em um aplicativo da Área de Trabalho do WindowsCall the Microsoft Graph API from a Windows Desktop app

Este guia demonstra como um aplicativo .NET da Área de Trabalho do Windows (XAML) nativo usa um token de acesso para chamar a API do Microsoft Graph.This guide demonstrates how a native Windows Desktop .NET (XAML) application uses an access token to call the Microsoft Graph API. O aplicativo também pode acessar outras APIs que exigem tokens de acesso de uma plataforma de identidade da Microsoft para o ponto de extremidade v2.0 do desenvolvedor.The app can also access other APIs that require access tokens from a Microsoft identity platform for developers v2.0 endpoint. Essa plataforma era chamada de Azure AD.This platform was formerly named Azure AD.

Depois de concluir o guia, seu aplicativo poderá chamar uma API protegida que usa contas pessoais (incluindo o outlook.com, live.com e outros).When you've completed the guide, your application will be able to call a protected API that uses personal accounts (including outlook.com, live.com, and others). O aplicativo também usará contas corporativas e de estudante de qualquer empresa ou organização que usa o Azure Active Directory.The application will also use work and school accounts from any company or organization that uses Azure Active Directory.

Observação

O guia exige o Visual Studio 2015 Atualização 3, Visual Studio 2017 ou o Visual Studio 2019.The guide requires Visual Studio 2015 Update 3, Visual Studio 2017, or Visual Studio 2019. Não tem nenhuma dessas versões?Don’t have any of these versions? Baixe gratuitamente o Visual Studio 2019.Download Visual Studio 2019 for free.

Como o aplicativo de exemplo gerado por este guia funcionaHow the sample app generated by this guide works

Mostra como funciona o aplicativo de exemplo gerado por este tutorial

O aplicativo de exemplo que você cria com este guia habilita um aplicativo da Área de Trabalho do Windows que consulta a API do Microsoft Graph ou uma API Web que aceita tokens de um ponto de extremidade da plataforma de identidade da Microsoft.The sample application that you create with this guide enables a Windows Desktop application that queries the Microsoft Graph API or a Web API that accepts tokens from a Microsoft identity-platform endpoint. Para esse cenário, você adiciona um token às solicitações HTTP por meio do cabeçalho de Autorização.For this scenario, you add a token to HTTP requests via the Authorization header. A MSAL (Biblioteca de Autenticação da Microsoft) lida com a aquisição e a renovação de tokens.Microsoft Authentication Library (MSAL) handles token acquisition and renewal.

Manipulando a aquisição de token para acessar APIs Web protegidasHandling token acquisition for accessing protected Web APIs

Após a autenticação do usuário, o aplicativo de exemplo receberá um token que pode ser usado para consultar a API do Microsoft Graph ou uma API Web protegida pela plataforma de identidade da Microsoft para desenvolvedores.After the user is authenticated, the sample application receives a token you can use to query Microsoft Graph API or a Web API that's secured by Microsoft identity platform for developers.

APIs, como o Microsoft Graph, exigem um token para permitir o acesso a recursos específicos.APIs such as Microsoft Graph require a token to allow access to specific resources. Por exemplo, um token é necessário para ler o perfil ou acessar o calendário de um usuário, ou enviar um email.For example, a token is required to read a user’s profile, access a user’s calendar, or send email. O aplicativo pode solicitar um token de acesso usando a MSAL para acessar esses recursos especificando escopos de API.Your application can request an access token by using MSAL to access these resources by specifying API scopes. Esse token de acesso é então adicionado ao cabeçalho de Autorização HTTP de cada chamada feita no recurso protegido.This access token is then added to the HTTP Authorization header for every call that's made against the protected resource.

A MSAL gerencia o armazenamento em cache e a atualização de tokens de acesso para você, de forma que o aplicativo não precise fazer isso.MSAL manages caching and refreshing access tokens for you, so that your application doesn't need to.

Pacotes NuGetNuGet packages

Este guia usa os seguintes pacotes NuGet:This guide uses the following NuGet packages:

BibliotecaLibrary DESCRIÇÃODescription
Microsoft.Identity.ClientMicrosoft.Identity.Client Biblioteca de Autenticação da Microsoft (MSAL.NET)Microsoft Authentication Library (MSAL.NET)

Configurar o seu projetoSet up your project

Nesta seção, você cria um novo projeto para demonstrar como integrar um aplicativo .NET da Área de Trabalho do Windows (XAML) com a opção Entrar com uma Conta da Microsoft, de forma que o aplicativo possa consultar APIs Web que exigem um token.In this section you create a new project to demonstrate how to integrate a Windows Desktop .NET application (XAML) with Sign-In with Microsoft so that the application can query Web APIs that require a token.

O aplicativo que você criar com este guia exibe um botão que é usado para chamar um gráfico, uma área para mostrar os resultados na tela e um botão de saída.The application that you create with this guide displays a button that's used to call a graph, an area to show the results on the screen, and a sign-out button.

Observação

Prefere baixar este projeto do Visual Studio de exemplo?Prefer to download this sample's Visual Studio project instead? Baixe um projeto e vá para a Etapa de configuração para configurar o exemplo de código antes de executá-lo.Download a project, and skip to the Configuration step to configure the code sample before you execute it.

Para criar seu aplicativo, faça o seguinte:To create your application, do the following:

  1. No Visual Studio, selecione Arquivo > Novo > Projeto.In Visual Studio, select File > New > Project.
  2. Em Modelos, selecione Visual C# .Under Templates, select Visual C#.
  3. Selecione aplicativo WPF (.NET Framework) , dependendo da versão do Visual Studio que você estiver usando.Select WPF App (.NET Framework), depending on the version of Visual Studio version you're using.

Adicionar MSAL ao seu projetoAdd MSAL to your project

  1. No Visual Studio, selecione Ferramentas > Gerenciador de Pacotes do NuGet> Console do Gerenciador de Pacotes.In Visual Studio, select Tools > NuGet Package Manager> Package Manager Console.

  2. Na janela do Console do Gerenciador de Pacotes, cole o seguinte comando do Azure PowerShell:In the Package Manager Console window, paste the following Azure PowerShell command:

    Install-Package Microsoft.Identity.Client -Pre
    

    Observação

    Esse comando instala a Biblioteca de Autenticação da Microsoft.This command installs Microsoft Authentication Library. A MSAL lida com a aquisição, o armazenamento em cache e a atualização de tokens de usuário usados para acessar APIs protegidas pelo Azure Active Directory v2.0MSAL handles acquiring, caching, and refreshing user tokens that are used to access the APIs that are protected by Azure Active Directory v2.0

Registre seu aplicativoRegister your application

Você pode registrar seu aplicativo de duas maneiras.You can register your application in either of two ways.

Opção 1: Modo ExpressoOption 1: Express mode

Registre rapidamente seu aplicativo fazendo o seguinte:You can quickly register your application by doing the following:

  1. Vá para o portal do Azure – Registro de Aplicativo.Go to the Azure portal - Application Registration.
  2. Insira um nome para seu aplicativo e selecione Registrar.Enter a name for your application and select Register.
  3. Siga as instruções para baixar e configurar automaticamente o novo aplicativo com apenas um clique.Follow the instructions to download and automatically configure your new application with just one click.

Opção 2: Modo AvançadoOption 2: Advanced mode

Para registrar seu aplicativo e adicionar suas informações de registro de aplicativo à sua solução, faça o seguinte:To register your application and add your application registration information to your solution, do the following:

  1. Entre no portal do Azure usando uma conta corporativa ou de estudante ou uma conta pessoal da Microsoft.Sign in to the Azure portal using either a work or school account or a personal Microsoft account.

  2. Se sua conta fornecer acesso a mais de um locatário, selecione sua conta no canto superior direito e defina sua sessão do portal para o locatário desejado do Azure AD.If your account gives you access to more than one tenant, select your account in the top right corner, and set your portal session to the desired Azure AD tenant.

  3. Navegue até a página Registros de aplicativo da plataforma de identidade da Microsoft para desenvolvedores.Navigate to the Microsoft identity platform for developers App registrations page.

  4. Selecione Novo registro.Select New registration.

    • Na seção Nome, insira um nome de aplicativo relevante que será exibido aos usuários do aplicativo, por exemplo, Win-App-calling-MsGraph.In the Name section, enter a meaningful application name that will be displayed to users of the app, for example Win-App-calling-MsGraph.
    • Na seção Tipos de conta com suporte, selecione Contas em qualquer diretório organizacional e contas pessoais da Microsoft (por exemplo, Skype, Xbox, Outlook.com) .In the Supported account types section, select Accounts in any organizational directory and personal Microsoft accounts (for example, Skype, Xbox, Outlook.com).
    • Selecione Registrar para criar o aplicativo.Select Register to create the application.
  5. Na lista de páginas para o aplicativo, selecione Autenticação.In the list of pages for the app, select Authentication.

    1. Na seção URIs de Redirecionamento na lista de URIs de Redirecionamento:In the Redirect URIs section, in the Redirect URIs list:
    2. Na coluna TIPO, selecione Cliente público (dispositivo móvel e desktop) .In the TYPE column select Public client (mobile & desktop).
    3. Insira urn:ietf:wg:oauth:2.0:oob na coluna URI DE REDIRECIONAMENTOIn the REDIRECT URI column, enter urn:ietf:wg:oauth:2.0:oob
  6. Clique em Salvar.Select Save.

  7. Vá para o Visual Studio, abra o arquivo App.xaml.cs e, depois, substitua Enter_the_Application_Id_here no snippet de código abaixo pela ID do aplicativo que você acabou de registrar e copiar.Go to Visual Studio, open the App.xaml.cs file, and then replace Enter_the_Application_Id_here in the code snippet below with the application ID that you just registered and copied.

    private static string ClientId = "Enter_the_Application_Id_here";
    

Adicionar o código para inicializar a MSALAdd the code to initialize MSAL

Nesta etapa, você cria uma classe para lidar com a interação com a MSAL, por exemplo, com a manipulação de tokens.In this step, you create a class to handle interaction with MSAL, such as handling of tokens.

  1. Abra o arquivo App.xaml.cs e adicione a referência para a MSAL à classe:Open the App.xaml.cs file, and then add the reference for MSAL to the class:

    using Microsoft.Identity.Client;
    
  2. Atualize a classe app para o seguinte:Update the app class to the following:

    public partial class App : Application
    {
        static App()
        {
            _clientApp = PublicClientApplicationBuilder.Create(ClientId)
                .WithAuthority(AzureCloudInstance.AzurePublic, Tenant)
                .Build();
        }
    
        // Below are the clientId (Application Id) of your app registration and the tenant information. 
        // You have to replace:
        // - the content of ClientID with the Application Id for your app registration
        // - the content of Tenant by the information about the accounts allowed to sign-in in your application:
        //   - For Work or School account in your org, use your tenant ID, or domain
        //   - for any Work or School accounts, use `organizations`
        //   - for any Work or School accounts, or Microsoft personal account, use `common`
        //   - for Microsoft Personal account, use consumers
        private static string ClientId = "0b8b0665-bc13-4fdc-bd72-e0227b9fc011";
    
        private static string Tenant = "common";
    
        private static IPublicClientApplication _clientApp ;
    
        public static IPublicClientApplication PublicClientApp { get { return _clientApp; } }
    }
    

Criar a interface do usuário do aplicativoCreate the application UI

Esta seção mostra como um aplicativo pode consultar um servidor de back-end protegido como o Microsoft Graph.This section shows how an application can query a protected back-end server such as Microsoft Graph.

Um arquivo MainWindow.xaml deve ser criado automaticamente como parte de seu modelo de projeto.A MainWindow.xaml file should automatically be created as a part of your project template. Abra esse arquivo e, em seguida, substitua o nó <Grade> de seu aplicativo pelo código a seguir:Open this file, and then replace your application's <Grid> node with the following code:

<Grid>
    <StackPanel Background="Azure">
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
            <Button x:Name="CallGraphButton" Content="Call Microsoft Graph API" HorizontalAlignment="Right" Padding="5" Click="CallGraphButton_Click" Margin="5" FontFamily="Segoe Ui"/>
            <Button x:Name="SignOutButton" Content="Sign-Out" HorizontalAlignment="Right" Padding="5" Click="SignOutButton_Click" Margin="5" Visibility="Collapsed" FontFamily="Segoe Ui"/>
        </StackPanel>
        <Label Content="API Call Results" Margin="0,0,0,-5" FontFamily="Segoe Ui" />
        <TextBox x:Name="ResultText" TextWrapping="Wrap" MinHeight="120" Margin="5" FontFamily="Segoe Ui"/>
        <Label Content="Token Info" Margin="0,0,0,-5" FontFamily="Segoe Ui" />
        <TextBox x:Name="TokenInfoText" TextWrapping="Wrap" MinHeight="70" Margin="5" FontFamily="Segoe Ui"/>
    </StackPanel>
</Grid>

Usar a MSAL para obter um token para a API do Microsoft GraphUse MSAL to get a token for the Microsoft Graph API

Nesta seção, você usará a MSAL para obter um token da API do Microsoft Graph.In this section, you use MSAL to get a token for the Microsoft Graph API.

  1. No arquivo MainWindow.xaml.cs, adicione a referência da MSAL à classe:In the MainWindow.xaml.cs file, add the reference for MSAL to the class:

    using Microsoft.Identity.Client;
    
  2. Substitua o código de classe MainWindow pelo seguinte:Replace the MainWindow class code with the following:

    public partial class MainWindow : Window
    {
        //Set the API Endpoint to Graph 'me' endpoint
        string graphAPIEndpoint = "https://graph.microsoft.com/v1.0/me";
    
        //Set the scope for API call to user.read
        string[] scopes = new string[] { "user.read" };
    
    
        public MainWindow()
        {
            InitializeComponent();
        }
    
      /// <summary>
        /// Call AcquireToken - to acquire a token requiring user to sign-in
        /// </summary>
        private async void CallGraphButton_Click(object sender, RoutedEventArgs e)
        {
            AuthenticationResult authResult = null;
            var app = App.PublicClientApp;
            ResultText.Text = string.Empty;
            TokenInfoText.Text = string.Empty;
    
            var accounts = await app.GetAccountsAsync();
            var firstAccount = accounts.FirstOrDefault();
    
            try
            {
                authResult = await app.AcquireTokenSilent(scopes, firstAccount)
                    .ExecuteAsync();
            }
            catch (MsalUiRequiredException ex)
            {
                // A MsalUiRequiredException happened on AcquireTokenSilent.
                // This indicates you need to call AcquireTokenInteractive to acquire a token
                System.Diagnostics.Debug.WriteLine($"MsalUiRequiredException: {ex.Message}");
    
                try
                {
                    authResult = await app.AcquireTokenInteractive(scopes)
                        .WithAccount(accounts.FirstOrDefault())
                        .WithPrompt(Prompt.SelectAccount)
                        .ExecuteAsync();
                }
                catch (MsalException msalex)
                {
                    ResultText.Text = $"Error Acquiring Token:{System.Environment.NewLine}{msalex}";
                }
            }
            catch (Exception ex)
            {
                ResultText.Text = $"Error Acquiring Token Silently:{System.Environment.NewLine}{ex}";
                return;
            }
    
            if (authResult != null)
            {
                ResultText.Text = await GetHttpContentWithToken(graphAPIEndpoint, authResult.AccessToken);
                DisplayBasicTokenInfo(authResult);
                this.SignOutButton.Visibility = Visibility.Visible;
            }
        }
    

Mais informaçõesMore information

Obter um token de usuário interativamenteGet a user token interactively

A chamada ao método AcquireTokenInteractive resulta em uma janela que solicita a conexão do usuário.Calling the AcquireTokenInteractive method results in a window that prompts users to sign in. Os aplicativos geralmente exigem que os usuários façam logon interativamente na primeira vez que precisarem acessar um recurso protegido.Applications usually require users to sign in interactively the first time they need to access a protected resource. Eles também podem precisar entrar quando uma operação silenciosa para adquirir um token falhar (por exemplo, quando a senha do usuário tiver expirado).They might also need to sign in when a silent operation to acquire a token fails (for example, when a user’s password is expired).

Obter um token de usuário no modo silenciosoGet a user token silently

O método AcquireTokenSilent manipula as aquisições e renovações de tokens sem nenhuma interação do usuário.The AcquireTokenSilent method handles token acquisitions and renewals without any user interaction. Depois que AcquireTokenInteractive for executado pela primeira vez, AcquireTokenSilent será o método comum usado para obter tokens que acessam recursos protegidos nas próximas chamadas – já que as chamadas para solicitar ou renovar tokens são feitas no modo silencioso.After AcquireTokenInteractive is executed for the first time, AcquireTokenSilent is the usual method to use to obtain tokens that access protected resources for subsequent calls, because calls to request or renew tokens are made silently.

Por fim, o método AcquireTokenSilent falhará.Eventually, the AcquireTokenSilent method will fail. Os motivos da falha podem ser que o usuário se desconectou ou alterou a senha em outro dispositivo.Reasons for failure might be that the user has either signed out or changed their password on another device. Quando a MSAL detecta que o problema pode ser resolvido com a solicitação de uma ação interativa, ela dispara uma exceção MsalUiRequiredException.When MSAL detects that the issue can be resolved by requiring an interactive action, it fires an MsalUiRequiredException exception. O aplicativo pode tratar essa exceção de duas maneiras:Your application can handle this exception in two ways:

  • Ele pode fazer uma chamada para AcquireTokenInteractive imediatamente.It can make a call against AcquireTokenInteractive immediately. Essa chamada resulta na solicitação de entrada do usuário.This call results in prompting the user to sign in. Esse padrão geralmente é usado nos aplicativos online em que não há nenhum conteúdo offline disponível para o usuário.This pattern is usually used in online applications where there is no available offline content for the user. O exemplo gerado por essa configuração interativa segue esse padrão, que você pode ver em ação na primeira vez que executar o exemplo.The sample generated by this guided setup follows this pattern, which you can see in action the first time you execute the sample.

  • Como nenhum usuário usou o aplicativo, PublicClientApp.Users.FirstOrDefault() conterá um valor nulo e uma exceção MsalUiRequiredException será lançada.Because no user has used the application, PublicClientApp.Users.FirstOrDefault() contains a null value, and an MsalUiRequiredException exception is thrown.

  • Em seguida, o código no exemplo trata a exceção chamando AcquireTokenInteractive, o que resulta na solicitação de entrada do usuário.The code in the sample then handles the exception by calling AcquireTokenInteractive, which results in prompting the user to sign in.

  • Ele também pode apresentar uma indicação visual aos usuários informando que uma entrada interativa é necessária, para que eles possam selecionar a hora certa de entrar.It can instead present a visual indication to users that an interactive sign-in is required, so that they can select the right time to sign in. O aplicativo também pode tentar novamente AcquireTokenSilent mais tarde.Or the application can retry AcquireTokenSilent later. Esse padrão é usado com frequência quando os usuários podem usar outras funcionalidades do aplicativo sem interrupções, por exemplo, quando o conteúdo offline está disponível no aplicativo.This pattern is frequently used when users can use other application functionality without disruption--for example, when offline content is available in the application. Nesse caso, os usuários podem decidir quando desejam entrar para acessar o recurso protegido ou para atualizar as informações desatualizadas.In this case, users can decide when they want to sign in to either access the protected resource or refresh the outdated information. Como alternativa, o aplicativo pode optar por repetir AcquireTokenSilent quando a rede é restaurada depois de estar temporariamente indisponível.Alternatively, the application can decide to retry AcquireTokenSilent when the network is restored after having been temporarily unavailable.

Chamar a API do Microsoft Graph usando o token obtido recentementeCall the Microsoft Graph API by using the token you just obtained

Adicione o seguinte método a MainWindow.xaml.cs.Add the following new method to your MainWindow.xaml.cs. O método é usado para fazer uma solicitação GET na API do Graph usando um cabeçalho de autorização:The method is used to make a GET request against Graph API by using an Authorize header:

/// <summary>
/// Perform an HTTP GET request to a URL using an HTTP Authorization header
/// </summary>
/// <param name="url">The URL</param>
/// <param name="token">The token</param>
/// <returns>String containing the results of the GET operation</returns>
public async Task<string> GetHttpContentWithToken(string url, string token)
{
    var httpClient = new System.Net.Http.HttpClient();
    System.Net.Http.HttpResponseMessage response;
    try
    {
        var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Get, url);
        //Add the token in Authorization header
        request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", token);
        response = await httpClient.SendAsync(request);
        var content = await response.Content.ReadAsStringAsync();
        return content;
    }
    catch (Exception ex)
    {
        return ex.ToString();
    }
}

Mais informações sobre como fazer uma chamada REST em uma API protegidaMore information about making a REST call against a protected API

Neste exemplo de aplicativo, use o método GetHttpContentWithToken para fazer uma solicitação HTTP GET em um recurso protegido que exige um token e, em seguida, retornar o conteúdo para o chamador.In this sample application, you use the GetHttpContentWithToken method to make an HTTP GET request against a protected resource that requires a token and then return the content to the caller. Esse método adiciona o token adquirido no cabeçalho de Autorização HTTP.This method adds the acquired token in the HTTP Authorization header. Para esta amostra, o recurso é o ponto de extremidade me da API do Microsoft Graph – que exibe as informações de perfil do usuário.For this sample, the resource is the Microsoft Graph API me endpoint, which displays the user's profile information.

Adicionar um método para desconectar um usuárioAdd a method to sign out a user

Para desconectar um usuário, adicione o seguinte método ao arquivo MainWindow.xaml.cs:To sign out a user, add the following method to your MainWindow.xaml.cs file:

/// <summary>
/// Sign out the current user
/// </summary>
private async void SignOutButton_Click(object sender, RoutedEventArgs e)
{
    var accounts = await App.PublicClientApp.GetAccountsAsync(); 

    if (accounts.Any())
    {
        try
        {
            await App.PublicClientApp.RemoveAsync(accounts.FirstOrDefault());
            this.ResultText.Text = "User has signed-out";
            this.CallGraphButton.Visibility = Visibility.Visible;
            this.SignOutButton.Visibility = Visibility.Collapsed;
        }
        catch (MsalException ex)
        {
            ResultText.Text = $"Error signing-out user: {ex.Message}";
        }
    }
}

Mais informações sobre como desconectar o usuárioMore information about user sign-out

O método SignOutButton_Click acima remove os usuários do cache de usuário da MSAL, o que diz para a MSAL esquecer o usuário atual, de modo que uma solicitação futura de aquisição de um token seja bem sucedida apenas se for feita para ser interativa.The SignOutButton_Click method removes users from the MSAL user cache, which effectively tells MSAL to forget the current user so that a future request to acquire a token will succeed only if it is made to be interactive.

Embora o aplicativo neste exemplo dê suporte a um único usuário, a MSAL dá suporte a cenários em que várias contas podem estar conectadas ao mesmo tempo.Although the application in this sample supports single users, MSAL supports scenarios where multiple accounts can be signed in at the same time. Um exemplo é um aplicativo de email onde um usuário tem várias contas.An example is an email application where a user has multiple accounts.

Exibir informações básicas de tokenDisplay basic token information

Para exibir informações básicas sobre o token, adicione o seguinte método ao arquivo MainWindow.xaml.cs:To display basic information about the token, add the following method to your MainWindow.xaml.cs file:

/// <summary>
/// Display basic information contained in the token
/// </summary>
private void DisplayBasicTokenInfo(AuthenticationResult authResult)
{
    TokenInfoText.Text = "";
    if (authResult != null)
    {
        TokenInfoText.Text += $"Username: {authResult.Account.Username}" + Environment.NewLine;
        TokenInfoText.Text += $"Token Expires: {authResult.ExpiresOn.ToLocalTime()}" + Environment.NewLine;
    }
}

Mais informaçõesMore information

Além do token de acesso que é usado para chamar a API do Microsoft Graph, após o usuário se autenticar, a MSAL também obterá um token de ID.In addition to the access token that's used to call the Microsoft Graph API, after the user signs in, MSAL also obtains an ID token. Esse token contém um pequeno subconjunto de informações pertinentes aos usuários.This token contain a small subset of information that's pertinent to users. O método DisplayBasicTokenInfo exibe as informações básicas contidas no token.The DisplayBasicTokenInfo method displays the basic information that's contained in the token. Por exemplo, ele mostra o nome de exibição do usuário e a ID, bem como a data de expiração do token e a cadeia de caracteres que representa o token de acesso em si.For example, it displays the user's display name and ID, as well as the token expiration date and the string representing the access token itself. Pressione o botão Chamar API do Microsoft Graph várias vezes e veja que o mesmo token foi reutilizado em solicitações posteriores.You can select the Call Microsoft Graph API button multiple times and see that the same token was reused for subsequent requests. Veja também a data de expiração que está sendo estendida quando a MSAL decide a hora de renovar o token.You can also see the expiration date being extended when MSAL decides it is time to renew the token.

Testar seu códigoTest your code

Para executar o projeto no Visual Studio, selecione F5.To run your project, in Visual Studio, select F5. Seu aplicativo MainWindow é exibido, conforme mostrado aqui:Your application MainWindow is displayed, as shown here:

Teste seu aplicativo

Na primeira vez em que você executar o aplicativo e selecionar o botão Chamar a API do Microsoft Graph você será solicitado a entrar.The first time that you run the application and select the Call Microsoft Graph API button, you're prompted to sign in. Use uma conta do Azure Active Directory (conta corporativa ou de estudante) ou uma conta da Microsoft (live.com, outlook.com) para testá-lo.Use an Azure Active Directory account (work or school account) or a Microsoft account (live.com, outlook.com) to test it.

Entrar no aplicativo

Na primeira vez que você entrar no seu aplicativo, você também será solicitado a fornecer autorização para permitir que o aplicativo acesse seu perfil e o conecte, como mostrado aqui:The first time that you sign in to your application, you're also prompted to provide consent to allow the application to access your profile and sign you in, as shown here:

Forneça sua autorização para acesso do aplicativo

Veja os resultados de aplicativoView application results

Depois de entrar, você deverá ver as informações do perfil do usuário retornadas pela chamada da API do Microsoft Graph.After you sign in, you should see the user profile information that's returned by the call to the Microsoft Graph API. Os resultados são exibidos na caixa Resultados da Chamada da API.The results are displayed in the API Call Results box. As informações básicas sobre o token que foi adquirido através da chamada para AcquireTokenInteractive ou AcquireTokenSilent devem estar visíveis na caixa Informações de Token.Basic information about the token that was acquired via the call to AcquireTokenInteractive or AcquireTokenSilent should be visible in the Token Info box. Os resultados contêm as propriedades a seguir:The results contain the following properties:

PropriedadeProperty FormatarFormat DESCRIÇÃODescription

|Nome de usuário |user@domain.com | O nome de usuário usado para identificar o usuário.| |Token Expira |DateTime |A hora em que o token expira.|Username |user@domain.com |The username that is used to identify the user.| |Token Expires |DateTime |The time at which the token expires. MSAL estende a data de validade renovando o token, conforme necessário.|MSAL extends the expiration date by renewing the token as necessary.|

Mais informações sobre escopos e permissões delegadasMore information about scopes and delegated permissions

A API do Microsoft Graph requer o escopo user.read para ler o perfil do usuário.The Microsoft Graph API requires the user.read scope to read a user's profile. Esse escopo é adicionado automaticamente, por padrão, a cada aplicativo que é registrado no Portal de Registro de Aplicativos.This scope is automatically added by default in every application that's registered in the Application Registration Portal. Outras APIs do Microsoft Graph, bem como APIs personalizadas do servidor de back-end, podem exigir escopos adicionais.Other APIs for Microsoft Graph, as well as custom APIs for your back-end server, might require additional scopes. A API do Microsoft Graph requer o escopo Calendars.Read para listar os calendários do usuário.The Microsoft Graph API requires the Calendars.Read scope to list the user’s calendars.

Para acessar os calendários do usuário no contexto de um aplicativo, adicione a permissão delegada Calendars.Read às informações de registro do aplicativo.To access the user’s calendars in the context of an application, add the Calendars.Read delegated permission to the application registration information. Em seguida, adicione o escopo Calendars.Read à chamada acquireTokenSilent.Then, add the Calendars.Read scope to the acquireTokenSilent call.

Observação

Talvez o usuário precise fornecer autorizações adicionais à medida que o número de escopos aumentar.The user might be prompted for additional consents as you increase the number of scopes.

Ajuda e suporteHelp and support

Se você precisar de Ajuda, quiser relatar um problema ou aprender mais sobre as opções de suporte, consulte o seguinte artigo:If you need help, want to report an issue, or want to learn more about your support options, see the following article:

Ajude-nos a melhorar a plataforma de identidade da Microsoft.Help us improve the Microsoft identity platform. Deixe sua opinião respondendo a uma breve pesquisa de duas perguntas.Tell us what you think by completing a short two-question survey.