Autenticação moderna agora está habilitada por padrão para todos os novos locatários do Microsoft 365/Azure porque esse protocolo é mais seguro do que a autenticação básica preterida. A Autenticação Moderna é baseada na Biblioteca de Autenticação do Active Directory e no OAuth 2.0. Ele usa tokens de tempo limitado e os aplicativos não armazenam credenciais de usuário. Além disso, está planejado proibir completamente o uso da autenticação básica para todos os clientes do Microsoft 365. Neste artigo, vamos nos concentrar no uso de autenticação moderna para conectar-se via EWS, SMTP, IMAP, clientes POP do Aspose.Email para .NET.

Configurações de pré-requisito

Para usar a autenticação moderna, certifique-se de que ela esteja habilitada. No entanto, para locatários criados antes de 1º de agosto de 2017, a autenticação moderna é desativada por padrão. No Centro de administração do Microsoft 365, vá em Configurações > Configurações da organização > Autenticação moderna. No submenu Autenticação moderna que aparece, você pode identificar os protocolos que não exigem mais a autenticação Básica. Para novos locatários do Microsoft365 no Azure, a autenticação básica é desabilitada por padrão para todos os aplicativos. Portanto, o texto será exibido nesta seção.

Your organization has security defaults enabled, which means modern authentication to Exchange Online is required, and basic authentication connections are blocked.
You must turn off security defaults in the Azure portal before you can change any settings here.

Você pode habilitar o suporte de autenticação básica para locatário no portal Azure, vá em Azure Active Directory > Propriedades > Gerenciar padrões de segurança > Habilitar padrões de segurança > Não. Para obter mais informações, consulte o Artigo de documentação da Microsoft.

Registro de aplicativo com o Azure Active Directory

Primeiramente, é necessário realizar o registro do aplicativo no Azure Active Directory. Existem dois tipos de permissões que podem ser usadas para acessar caixas de correio com seu aplicativo. Escolha um tipo específico de permissão, dependendo do aplicativo que você está criando:

  • Os aplicativos que usam permissões delegadas têm um usuário conectado presente. Em outras palavras, quando você se conecta ao serviço, uma janela de diálogo aparece para um nome de usuário e uma senha. O aplicativo nunca pode ter mais privilégios do que um usuário conectado.
  • Os aplicativos que usam permissões de aplicativo são executados sem a presença de um usuário conectado. Por exemplo, esses são aplicativos executados como serviços ou daemons em segundo plano. Somente um administrador pode consentir com as permissões do aplicativo.

Além disso, consulte o Artigo de documentação da Microsoft para obter mais informações.

O procedimento de registro depende do tipo de permissão selecionado. Para registrar seu aplicativo, consulte o Artigo de documentação da Microsoft.

API C# .NET para acessar servidores de e-mail

Para criar os clientes EWS, Imap e Smtp, usaremos Aspose.Email for .NET. É uma biblioteca incrível para implementar aplicativos de cliente de e-mail usando .NET. Usando a biblioteca, você pode se conectar e acessar facilmente os servidores de e-mail. Você pode instalar o Aspose.Email para .NET via NuGet ou download sua DLL.

PM> Install-Package Aspose.Email

Use autenticação moderna com EwsClient

Depois de registrar o aplicativo, podemos nos concentrar em escrever o código, que consistirá nas seguintes partes:

  • Em primeiro lugar, obtenha o token de autorização.
  • Em seguida, use o token para autenticar.

Obtendo o token de autorização

Para obter o token, usaremos a Microsoft Authentication Library (MSAL) for .NET.

A seguir estão as etapas para obter o token de autorização em C#.

  • Adicione o pacote nuget do Microsoft.Identity.Client que contém os binários do MSAL.NET.
  • Crie uma classe AccessParameters para armazenar credenciais.
  • Por fim, crie um método aceitando parâmetros de acesso e usando MSAL.NET para obter um token de acesso.

Os exemplos de código a seguir dependerão do tipo de autenticação escolhido.

Obter um token com autenticação delegada

public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string RedirectUri { get; set; } = "http://localhost";
    public string[] Scopes { get; set; } = { "https://outlook.office365.com/EWS.AccessAsUser.All" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var pca = PublicClientApplicationBuilder
                            .Create(accessParameters.ClientId)
                            .WithTenantId(accessParameters.TenantId)
                            .WithRedirectUri(ccessParameters.RedirectUri)
                            .Build();

    var result = await pca.AcquireTokenInteractive(accessParameters.Scopes)
        .WithUseEmbeddedWebView(false)
        .ExecuteAsync();

    return result.AccessToken;
}

Obter um token com autenticação de aplicativo

public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string ClientSecret { get; set; }
    public string[] Scopes { get; set; } = { "https://outlook.office365.com/.default" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var cca = ConfidentialClientApplicationBuilder
        .Create(accessParameters.ClientId)
        .WithClientSecret(accessParameters.ClientSecret)
        .WithTenantId(accessParameters.TenantId)
        .Build();

    var result = await cca.AcquireTokenForClient(accessParameters.Scopes).ExecuteAsync();

    return result.AccessToken;
}

Usando o token para autenticar

Depois disso, quando obtivermos um token com sucesso, vamos inicializar o EwsClient.

Usando o token com autenticação delegada

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

using var client = EWSClient.GetEWSClient("https://outlook.office365.com/EWS/Exchange.asmx", credentials);

Usando o token com autenticação de aplicativo

// Use o nome de usuário e o token de acesso do Microsoft365
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

using var client = EWSClient.GetEWSClient("https://outlook.office365.com/EWS/Exchange.asmx", credentials);

Use a autenticação moderna com clientes IMAP, POP ou SMTP

O acesso IMAP, POP, SMTP por meio de permissões de aplicativo não é suportado. Em outras palavras, apenas a autenticação delegada é suportada.

O procedimento de registro do aplicativo com o Azure Active Directory é definido acima.

Use o centro de administração do Microsoft 365 para habilitar ou desabilitar IMAP, POP, SMTP AUTH em caixas de correio específicas

  • Abra o Centro de administração do Microsoft 365 e vá para Usuários > Usuários ativos.
  • Selecione o usuário e, no submenu que aparece, clique em Email.
  • Na seção Aplicativos de e-mail, clique em Gerenciar aplicativos de e-mail.
  • Verifique a configuração IMAP, POP, SMTP autenticado: desmarcada = desabilitada, marcada = habilitada.
  • Por fim, clique em Salvar alterações.

Adicionando código para obter um token de autenticação de um servidor de token

Certifique-se de especificar os escopos completos, incluindo URLs de recursos do Outlook.

Para obter o token, usaremos a Microsoft Authentication Library (MSAL) for .NET.

A seguir estão as etapas para obter o token de autorização em C#.

  • Adicione o pacote nuget do Microsoft.Identity.Client que contém os binários do MSAL.NET.
  • Crie uma classe AccessParameters para armazenar credenciais.
  • Por fim, crie um método aceitando parâmetros de acesso e usando MSAL.NET para obter um token de acesso.
public class AccessParameters
{
    public string TenantId { get; set; }
    public string ClientId { get; set; }
    public string RedirectUri { get; set; } = "http://localhost";
    public string[] Scopes { get; set; } = { 
        "https://outlook.office.com/IMAP.AccessAsUser.All", 
        "https://outlook.office.com/SMTP.Send" };
}

public static async Task<string> GetAccessToken(AccessParameters accessParameters)
{
    var pca = PublicClientApplicationBuilder
                            .Create(accessParameters.ClientId)
                            .WithTenantId(accessParameters.TenantId)
                            .WithRedirectUri(ccessParameters.RedirectUri)
                            .Build();

    var result = await pca.AcquireTokenInteractive(accessParameters.Scopes)
        .WithUseEmbeddedWebView(false)
        .ExecuteAsync();

    return result.AccessToken;
}

Usando o token para autenticar

Depois disso, quando obtivermos um token com sucesso, vamos inicializar o ImapClient.

var imapClient = new ImapClient(
    "outlook.office365.com", 
    993, 
    username, 
    accessToken, 
    true);

Da mesma forma, a inicialização do SmtpClient terá a seguinte aparência.

var smtpClient = new SmtpClient(
    "smtp.office365.com",
    587, 
    username,
    accessToken, 
    true);

Obtenha uma licença de API gratuita

Você pode usar o Aspose.Email para .NET sem limitações de avaliação usando uma licença temporária gratuita.

Conclusão

Neste artigo, você aprendeu como usar a autenticação moderna com a API Aspose.Email para se conectar às caixas de correio do Microsoft365. Além disso, você viu que pode criar facilmente aplicativos cliente de e-mail que atendam aos requisitos avançados de segurança. Você pode aprender mais sobre o Aspose.Email usando a documentação. Caso você tenha alguma dúvida, você pode postar em nosso fórum.

Veja também