Partilhar via


Tutorial: Chamar uma API da Web protegida a partir do seu aplicativo daemon .NET

Aplica-se a: círculo verde com um símbolo de marca de seleção branco que indica que o conteúdo a seguir se aplica aos locatários da força de trabalho. Locatários da força de trabalho Círculo verde com um símbolo de marca de seleção branco que indica que o conteúdo a seguir se aplica a locatários externos. Inquilinos externos (saiba mais)

Este tutorial demonstra como chamar uma API da Web protegida de um aplicativo daemon .NET. Você habilita o aplicativo daemon cliente para adquirir um token de acesso usando sua própria identidade e, em seguida, chama a API da Web. No nosso caso, efetuamos uma chamada a um ponto de extremidade protegido do Microsoft Graph.

Neste tutorial;

  • Configure uma aplicação daemon para usar os seus próprios detalhes de registo da aplicação. Certifique-se de conceder ao aplicativo a permissão User.Read.All na API do Microsoft Graph.
  • Crie um aplicativo daemon que adquira um token em seu próprio nome e chame uma API da Web protegida.

Pré-requisitos

  • .NET. Neste tutorial, usamos o .NET 9.0.
  • Visual Studio Code ou outro editor de código.
  • Um registo de aplicação no seu locatário. Certifique-se de que tem o seguinte nos detalhes de registo da aplicação:
    • A ID do Aplicativo (cliente) do aplicativo Web cliente que você registrou.
    • A ID do Diretório (locatário) onde você registrou seu aplicativo Web.
    • O segredo do cliente valor para o aplicativo Web que você criou.

Criar um aplicativo daemon .NET

  1. Abra o terminal e navegue até a pasta onde você deseja que seu projeto viva.

  2. Inicialize um aplicativo de console .NET e navegue até sua pasta raiz.

    dotnet new console -n DotnetDaemon
    cd DotnetDaemon
    

Instalar pacotes

Instale Microsoft.Identity.Web e Microsoft.Identity.Web.DownstreamApi pacotes:

dotnet add package Microsoft.Identity.Web
dotnet add package Microsoft.Identity.Web.DownstreamApi

Microsoft.Identity.Web fornece a cola entre o ASP.NET Core, o middleware de autenticação e a Microsoft Authentication Library (MSAL) para .NET, facilitando a adição de recursos de autenticação e autorização ao seu aplicativo. Microsoft.Identity.Web.DownstreamApi fornece uma interface usada para chamar uma API downstream.

Criar appsettings.json arquivo e adicionar configurações de registro

  1. Crie appsettings.json arquivo na pasta raiz do aplicativo.

  2. Adicione os detalhes de registro do aplicativo ao arquivo appsettings.json.

    {
        "AzureAd": {
            // "Authority": "", you can use this for customer tenants in place of Instance and TenantId values
            "Instance": "https://login.microsoftonline.com/",
            "TenantId": "Enter_the_Tenant_ID_Here",
            "ClientId": "Enter_the_Application_ID_Here",
            "ClientCredentials": [
                {
                    "SourceType": "ClientSecret",
                    "ClientSecret": "Enter_the_Client_Secret_Here"
                }
            ]
        },
        "DownstreamApi": {
            "BaseUrl": "https://graph.microsoft.com",
            "RelativePath": "/v1.0/users/",
            "RequestAppToken": true,
            "Scopes": [
                "https://graph.microsoft.com/.default"
            ]
        }
    }
    

    Substitua os seguintes valores pelos seus:

    Valor Descrição
    Insira_o_ID_da_Aplicação_Aqui O ID do aplicativo (cliente) do aplicativo daemon cliente que você registrou.
    Insira_o_Cliente_Segredo_Aqui O valor secreto do aplicativo daemon que criaste.
    Introduza_o_ID_do_Inquilino_Aqui O ID do arrendatário do diretório/locador onde a aplicação está registada.

    Observação

    Para aplicações registadas em inquilinos externos, pode usar a Autoridade e remover a Instância e o ID do Inquilino .

    "Authority": "https://<Enter_the_Tenant_Subdomain_Here>.ciamlogin.com/". Onde Enter_the_Tenant_Subdomain_Here é o subdomínio do locatário.

  3. Adicione o arquivo appsettings.json ao arquivo de projeto. O arquivo de projeto é um ficheiro .csproj no seu projeto. Isso ocorre porque o arquivo precisa ser copiado para o diretório de saída.

    <ItemGroup>
        <None Update="appsettings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        </None>
    </ItemGroup>
    

Adquirir token de acesso

  1. Abra o arquivo program.cs no editor de códigos e exclua seu conteúdo.

  2. Adicione seus pacotes ao arquivo.

    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Identity.Abstractions;
    using Microsoft.Identity.Web;
    
  3. Crie a instância de aquisição de token. Use o método GetDefaultInstance da classe TokenAcquirerFactory do pacote Microsoft.Identity.Web para criar a instância de aquisição de token. Por padrão, a instância lê um arquivo appsettings.json se ele existir na mesma pasta que o aplicativo. GetDefaultInstance também nos permite adicionar serviços à coleção de serviços.

    Adicione esta linha de código ao arquivo program.cs:

    var tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();
    
  4. Configure as opções do aplicativo para serem lidas a partir da configuração e adicione o serviço DownstreamApi. O serviço DownstreamApi fornece uma interface usada para chamar uma API downstream. Chamamos esse serviço DownstreamAPI no objeto config. O aplicativo daemon lê as configurações de API downstream da seção DownstreamApi do appsettings.json. Por padrão, você obtém um cache de token na memória.

    Adicione o seguinte trecho de código ao arquivo program.cs:

    const string ServiceName = "DownstreamApi";
    
    tokenAcquirerFactory.Services.AddDownstreamApi(ServiceName,
        tokenAcquirerFactory.Configuration.GetSection("DownstreamApi"));
    

    A API downstream que você chama é o Microsoft Graph. Neste tutorial, usamos o serviço DownstreamApi. Você também pode usar o SDK do Microsoft Graph.

  5. Construa o adquirente de tokens. Isto agrega todos os serviços que você adiciona e retorna um provedor de serviços. Use este provedor de serviços para obter acesso ao recurso de API adicionado. Nesse caso, você adiciona apenas um recurso de API como um serviço downstream ao qual deseja acessar.

    Adicione o seguinte trecho de código ao arquivo program.cs:

    var serviceProvider = tokenAcquirerFactory.Build();
    

Chamar a API da Web

  1. Adicione código para chamar sua API da Web protegida usando a interface IDownstreamApi. Neste tutorial, chamamos um ponto final da API do Microsoft Graph.

  2. Adicione este código ao ficheiro program.cs:

    try
    {
        IDownstreamApi downstreamApi = serviceProvider.GetRequiredService<IDownstreamApi>();
    
        var response = await downstreamApi.GetForAppAsync<HttpResponseMessage>("DownstreamApi");
        var content = await response.Content.ReadAsStringAsync();
        var statusCode = response.StatusCode;
    
        Console.WriteLine($"Response status code: {statusCode}");
    
        if (!content.Any())
        {
            Console.WriteLine("There are no users to display.");
            return;
        }
    
        Console.WriteLine(content);
    }
    catch (Exception ex) { Console.WriteLine("We could not retrieve the user's list: " + $"{ex}"); }
    

    O código chama o ponto de extremidade que você definiu no arquivo appsettings.json. O método GetForAppAsync da interface IDownstreamApi é usado para chamar o endpoint. O aplicativo faz uma chamada em seu próprio nome. O método retorna um objeto HttpResponseMessage. A resposta é então lida como uma cadeia de caracteres e exibida no console.

Execute o aplicativo daemon cliente

Navegue até a pasta raiz do aplicativo daemon e execute o seguinte comando:

dotnet run

Se estiver tudo bem, deverá ver código de estado da resposta: OK no seu terminal. Se houver usuários, os usuários estão listados no terminal, caso contrário, você verá a mensagem Não há usuários para exibir.

Se ocorrer algum erro, você verá uma mensagem de erro no terminal.

Solução de problemas

Caso encontre erros,

  • Confirme os detalhes de registo que adicionou ao ficheiro appsettings.json.
  • Confirme que você adicionou o arquivo appsettings.json ao arquivo de projeto.
  • Confirme se as permissões do aplicativo estão configuradas corretamente.