最新の認証は、廃止された基本認証よりも安全であるため、すべての新しいMicrosoft 365/Azureテナントに対してデフォルトで有効になりました。 最新の認証は、ActiveDirectory認証ライブラリとOAuth2.0に基づいています。時間制限のあるトークンを使用し、アプリケーションはユーザーの資格情報を保存しません。 さらに、すべてのMicrosoft365クライアントでの基本認証の使用を完全に禁止する予定です。 この記事では、Modern Authenticationを使用して、Aspose.Email for .NETのEWS、SMTP、IMAP、POPクライアントを介して接続することに焦点を当てます。

前提条件の設定

最新の認証を使用するには、それが有効になっていることを確認してください。ただし、2017年8月1日より前に作成されたテナントの場合、最新の認証はデフォルトでオフになっています。 Microsoft365管理センターで、[設定]>[組織の設定]>[最新の認証]に移動します。表示される[最新の認証]フライアウトで、基本認証を必要としなくなったプロトコルを特定できます。 Azureの新しいMicrosoft365テナントの場合、基本認証はすべてのアプリケーションでデフォルトで無効になっています。したがって、このセクションにはテキストが表示されます。

組織ではセキュリティのデフォルトが有効になっています。つまり、Exchange Onlineへの最新の認証が必要であり、基本的な認証接続はブロックされています。ここで設定を変更する前に、Azureポータルでセキュリティのデフォルトをオフにする必要があります。

Azureポータルからテナントの基本認証サポートを有効にできます。[AzureActiveDirectory]>[プロパティ]>[セキュリティの既定値の管理]>[セキュリティの既定値を有効にする]>[いいえ]に移動します。 詳細については、Microsoftドキュメントの記事を参照してください。

AzureActiveDirectoryへのアプリの登録

まず、AzureActiveDirectoryでアプリの登録を行う必要があります。 アプリでメールボックスにアクセスするために使用できる権限には2つのタイプがあります。作成するアプリに応じて、特定の種類の権限を選択します。

  • 委任された権限を使用するアプリには、サインインしたユーザーが存在します。つまり、サービスに接続すると、ユーザー名とパスワードのダイアログウィンドウが表示されます。アプリは、サインインしたユーザーよりも多くの特権を持つことはできません。
  • アプリケーション権限を使用するアプリは、サインインしたユーザーがいない状態で実行されます。たとえば、これらはバックグラウンドサービスまたはデーモンとして実行されるアプリです。管理者のみがアプリケーションのアクセス許可に同意できます。

また、詳細については、Microsoftドキュメントの記事を参照してください。

登録手順は、選択した権限の種類によって異なります。アプリを登録するには、Microsoftドキュメントの記事を参照してください。

電子メールサーバーにアクセスするためのC#.NET API

EWS、Imap、およびSmtpクライアントを作成するには、Aspose.Email for.NETを使用します。 .NETを使用して電子メールクライアントアプリを実装するのは素晴らしいライブラリです。ライブラリを使用すると、電子メールサーバーに簡単に接続してアクセスできます。 Aspose.Email for .NETは、NuGetまたはダウンロードそのDLLを介してインストールできます。

PM> Install-Package Aspose.Email

EwsClientで最新の認証を使用する

アプリケーションを登録した後、次の部分で構成されるコードの記述に集中できます。

  • まず、認証トークンを取得します。
  • 次に、トークンを使用して認証します。

承認トークンの取得

トークンを取得するには、Microsoft Authentication Library(MSAL)for.NETを使用します。

以下は、C#で認証トークンを取得する手順です。

  • MSAL.NETのバイナリを含むMicrosoft.Identity.Clientnugetパッケージを追加します。
  • 資格情報を保存するAccessParametersクラスを作成します。
  • 最後に、アクセスパラメータを受け入れ、MSAL.NETを使用してアクセストークンを取得するメソッドを作成します。

次のコードサンプルは、選択した認証のタイプによって異なります。

委任された認証でトークンを取得する

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

アプリ認証でトークンを取得する

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

トークンを使用して認証する

その後、トークンの取得に成功したら、EwsClientを初期化します。

委任された認証でトークンを使用する

NetworkCredential credentials = new OAuthNetworkCredential(accessToken);

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

アプリ認証でトークンを使用する

// Microsoft365ユーザー名とアクセストークンを使用する
NetworkCredential credentials = new OAuthNetworkCredential(username, accessToken);

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

IMAP、POP、またはSMTPクライアントで最新の認証を使用する

アプリケーションのアクセス許可を介したIMAP、POP、SMTPアクセスはサポートされていません。つまり、委任された認証のみがサポートされます。

AzureActiveDirectoryへのアプリの登録手順は上記で定義されています。

Microsoft 365管理センターを使用して、特定のメールボックスでIMAP、POP、SMTPAUTHを有効または無効にします

  • Microsoft365管理センターを開き、[ユーザー]>[アクティブユーザー]に移動します。
  • ユーザーを選択し、表示されるフライアウトで[メール]をクリックします。
  • [メールアプリ]セクションで、[メールアプリの管理]をクリックします。
  • IMAP、POP、認証済みSMTP設定を確認します:チェックなし=無効、チェック済み=有効。
  • 最後に、[変更を保存]をクリックします。

トークンサーバーから認証トークンを取得するためのコードを追加する

OutlookリソースURLを含む完全なスコープを指定してください。

  • IMAP:https://outlook.office.com/IMAP.AccessAsUser.All
  • POP:https://outlook.office.com/POP.AccessAsUser.All
  • SMTP:https://outlook.office.com/SMTP.Send

トークンを取得するには、Microsoft Authentication Library(MSAL)for.NETを使用します。

以下は、C#で認証トークンを取得する手順です。

  • MSAL.NETのバイナリを含むMicrosoft.Identity.Clientnugetパッケージを追加します。
  • 資格情報を保存するAccessParametersクラスを作成します。
  • 最後に、アクセスパラメータを受け入れ、MSAL.NETを使用してアクセストークンを取得するメソッドを作成します。
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;
}

トークンを使用して認証する

その後、トークンの取得に成功したら、ImapClientを初期化します。

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

同様に、SmtpClientの初期化は次のようになります。

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

無料のAPIライセンスを取得する

無料の一時ライセンスを使用すると、評価の制限なしにAspose.Emailfor.NETを使用できます。

結論

この記事では、Aspose.EmailAPIで最新の認証を使用してMicrosoft365メールボックスに接続する方法を学習しました。さらに、高度なセキュリティ要件を満たす電子メールクライアントアプリケーションを簡単に作成できることを確認しました。 Aspose.Emailの詳細については、ドキュメントを使用してください。ご不明な点がございましたら、フォーラムに投稿してください。

関連項目