Autenticação do Microsoft Graph com MSAL
Introdução à Autenticação do Graph
Microsoft Graph é uma API REST unificada para acessar dados em serviços Microsoft 365 como Outlook, OneDrive e Teams. Aspose.Email para .NET fornece um IGraphClient interface que simplifica a interação com o Microsoft Graph ao oferecer uma API de alto nível e tipada.
Usando IGraphClient, você pode autenticar via MSAL, então executar operações comuns como:
-
Gerenciar pastas de e‑mail (listar, criar, atualizar, copiar, excluir)
-
Trabalhar com mensagens e anexos (ler, enviar, mover e manipular conteúdo)
-
Acessar e gerenciar eventos de calendário, contatos, categorias, regras, tarefas e blocos de anotações do OneNote
Os exemplos a seguir demonstram como criar e configurar um GraphClient instância com um token de acesso, seguido por cenários de uso típicos.
Autenticar o Microsoft Graph com MSAL.NET
Para trabalhar com o Microsoft Graph usando Aspose.Email para .NET, você deve primeiro autenticar sua aplicação. Isso pode ser feito implementando o ITokenProvider interface, que fornece tokens de acesso ao IGraphClient.
Esta seção orienta você na configuração do MSAL.NET para obter tokens e inicializar o IGraphClient para enviar solicitações autenticadas aos serviços do Microsoft Graph.
Biblioteca de Autenticação da Microsoft (MSAL)
Etapa 1: Definir a Classe AccessParameters
Crie uma classe simples para armazenar suas credenciais do Microsoft 365 e a configuração relacionada.
public class AccessParameters
{
public string TenantId { get; init; }
public string ClientId { get; init; }
public string ClientSecret { get; init; }
public string UserId { get; init; }
public Uri Authority => new ($"https://login.microsoftonline.com/{TenantId}");
public string ApiUrl => "https://graph.microsoft.com/.default";
}
Etapa 2: Instalar o Pacote MSAL.NET
Adicionar o Microsoft.Identity.Client Pacote NuGet para o seu projeto. Ele contém a Microsoft Authentication Library (MSAL) usada para obter tokens de acesso.
dotnet add package Microsoft.Identity.Client
Etapa 3: Implementar a Interface ITokenProvider
Crie um GraphTokenProvider classe que implementa o ITokenProvider interface. Esta classe usará a biblioteca MSAL.NET para adquirir um token de acesso.
using Microsoft.Identity.Client;
using Microsoft.Identity.Web;
using Aspose.Email.Clients;
public class GraphTokenProvider : ITokenProvider
{
private readonly IConfidentialClientApplication _app;
private readonly string[] _scopes;
private string? _token;
public GraphTokenProvider(AccessParameters accessParams)
{
_app = ConfidentialClientApplicationBuilder.Create(accessParams.ClientId)
.WithClientSecret(accessParams.ClientSecret)
.WithAuthority(accessParams.Authority)
.Build();
_app.AddInMemoryTokenCache();
_scopes = new[] { accessParams.ApiUrl };
}
public void Dispose()
{
throw new NotImplementedException();
}
public OAuthToken GetAccessToken()
{
return GetAccessToken(false);
}
public OAuthToken GetAccessToken(bool ignoreExistingToken)
{
if (!ignoreExistingToken && _token != null)
{
return new OAuthToken(_token);
}
_token = GetAccessTokenAsync().GetAwaiter().GetResult();
return new OAuthToken(_token);
}
private async Task<string?> GetAccessTokenAsync()
{
AuthenticationResult? result;
try
{
result = await _app.AcquireTokenForClient(_scopes)
.ExecuteAsync();
Console.WriteLine("Token acquired");
}
catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
{
Console.WriteLine("Scope provided is not supported");
result = null;
}
if (result == null) return null;
_token = result.AccessToken;
return result.AccessToken;
}
Etapa 4: Criar uma Instância de ITokenProvider
Depois que seu GraphTokenProvider classe está pronta, você pode instanciá‑la usando as credenciais do seu aplicativo.
var accessParams = new AccessParameters()
{
TenantId = "Your Tenant ID",
ClientId = "Your Client ID",
ClientSecret = "Your Client Secret",
UserId = "User's Object ID"
};
var tokenProvider = new GraphTokenProvider(accessParams);
Etapa 5: Inicializar o IGraphClient
Use o provedor de token para criar um IGraphClient instância. Defina o tipo de recurso e o ID para começar a interagir com o Microsoft Graph.
using var client = GraphClient.GetClient(tokenProvider, accessParams.TenantId);
client.Resource = ResourceType.Users;
client.ResourceId = accessParams.UserId;
Seu IGraphClient agora está autenticado e pronto para enviar solicitações ao Microsoft Graph em nome da sua aplicação.
Conectar ao Endpoint GCC High no Microsoft Graph
Aspose.Email GraphClient suporta conexão ao endpoint Microsoft Graph GCC High definindo o EndPoint propriedade manualmente. Defina a propriedade para https://graph.microsoft.us antes de fazer requisições.
O exemplo de código a seguir demonstra como configurar o GraphClient para conectar ao endpoint GCC High para listar pastas e recuperar mensagens.
client.EndPoint = "https://graph.microsoft.us";
var folders = client.ListFolders();
string folderId = folders.Find(x => x.DisplayName == "Inbox").ItemId;
var msgs = client.ListMessages(folderId);
Autenticação Assíncrona ao Microsoft Graph
Use o Aspose.Email.Clients.Graph.IGraphClientAsync interface para executar operações assíncronas com GraphClient. O GraphClient.GetClientAsync(ITokenProvider, string) e GraphClient.GetClientAsync(IMultipleServicesTokenProvider, string) os métodos permitem inicializar clientes assíncronos do Graph. O exemplo de código a seguir demonstra como configurar um cliente autenticado do Microsoft Graph com credenciais de aplicativo Azure AD para que ele possa operar na caixa de correio de um usuário específico:
var accessParameters = Settings.User1;
var provider = new AzureConfidentialTokenProvider(
accessParameters.TenantId,
accessParameters.ClientId,
accessParameters.ClientSecret);
var client = GraphClient.GetClientAsync(provider, accessParameters.TenantId);
client.Resource = Aspose.Email.Clients.Graph.ResourceType.Users;
client.ResourceId = accessParameters.Username;
client.EndPoint = "https://graph.microsoft.com";