
最新の認証は、廃止された基本認証よりも安全であるため、すべての新しいMicrosoft 365/Azureテナントに対してデフォルトで有効になりました。 最新の認証は、ActiveDirectory認証ライブラリとOAuth2.0に基づいています。時間制限のあるトークンを使用し、アプリケーションはユーザーの資格情報を保存しません。 さらに、すべてのMicrosoft365クライアントでの基本認証の使用を完全に禁止する予定です。 この記事では、Modern Authenticationを使用して、Aspose.Email for .NETのEWS、SMTP、IMAP、POPクライアントを介して接続することに焦点を当てます。
- 前提条件の設定
- AzureActiveDirectoryへのアプリの登録
- 電子メールサーバーにアクセスするためのC#.NET API
- EwsClientで最新の認証を使用する
- IMAP、POP、またはSMTPクライアントで最新の認証を使用する
前提条件の設定
最新の認証を使用するには、それが有効になっていることを確認してください。ただし、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の詳細については、ドキュメントを使用してください。ご不明な点がございましたら、フォーラムに投稿してください。