Exchange Onlineを含む、Office365上のサービスをAPIで接続する際は、最初に認証を行う必要があります。Exchangeの認証方法として、次の3つの方法があります。
- Basic認証
- NTLM
- OAuth
Basic認証はMicrosoftから非推奨とされており、NTLMはオンプレミスのExchange Serverでのみ利用可能です。必然的にExchange OnlineにおいてはOAuthを利用するしかありません。
Office365で独自のアプリケーションからOAuthを利用して認証するためには、Office365に紐づいているAzureADに対し、対象のアプリケーションを事前に登録する必要があります。
AzureADへのアプリケーションの登録方法
Office365のAdmin Centerから、「管理センター」/「Azure AD」を開きます。対象となるディレクトリを選択し、上部の「アプリケーション」を選択します。
画面下部にある「追加」を選択すると、アプリケーションを新規登録できます。
その際に以下の情報を入力します。
- アプリケーション名
- 種類(Web/ネイティブ)
- リダイレクトURL
最後にそのアプリケーションに対する認可の種類を設定します。構成画面に下部にアクセス許可に関する項目がありますので、ここで「アプリケーションの追加」を選択し、Office365のどのサービスに対して、どのようなアクセス権を追加するのかを指定します。
AzureADにアプリケーションを登録すると、クライアントIDが発行されます。独自のアプリケーションでExchange Onlineにログインするためには、このクライアントIDをリクエスト値に指定する必要があるため、メモをとっておきます。
アプリケーションの開発
OAuthでの認証は、Microsoft Azure AD Authentication Library(ADAL)が用意されているため、これを利用します。入手先は、NuGetから任意のプロジェクトに対して追加します。NuGetは、VisualStudioの「ツール」/「NuGetパッケージマネージャー」/「パッケージマネージャーコンソール」で利用可能です。
以下コマンドを実行し、ADALを入手します。
[plain]PM> Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
[/plain]以下はコードサンプル
[csharp]string authority = "https://login.windows.net/{テナント}";
string clientId = "{クライアントID}";
Uri redirectUri = new Uri("{リダイレクトURL}");
string resourceName = "https://outlook.office365.com";
AuthenticationContext authenticationContext = new AuthenticationContext(authority, false);
AuthenticationResult result = await authenticationContext.AcquireTokenAsync(resourceName, clientId, redirectUri, new PlatformParameters(PromptBehavior.Auto));
ExchangeService service = new ExchangeService();
service.Url = new Uri("https://outlook.office365.com/ews/exchange.asmx")
service.Credentials = new OAuthCredentials(result.AccessToken);
[/csharp]