Office 365 に EWS で接続する際の注意点について
今回は Office 365 に Exchange Web Services (EWS) で接続する際に別途対応が必要な内容についてご紹介いたします。
On-Premise 環境の Exchange Server 2007 や Exchange Server 2010 に EWS で接続する場合、以下で示すように System.Net.NetworkCredential などを利用して資格情報を設定することが多いかと思います。
(EWS Managed API では System.Net.NetworkCredential 以外に Microsoft.Exchange.WebServices.Data.WebCredentials でも資格情報を設定することができます)
------- Exchange Web Services の例 ------- ExchangeServiceBinding esb = new ExchangeServiceBinding(); esb.RequestServerVersionValue = new RequestServerVersion(); esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2010_SP2; esb.Credentials = new NetworkCredential(<UserID>, <Password>); esb.Url = <Autodiscover で取得した接続先 URL>; ---------- EWS Managed API の例 ---------- ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); service.Credentials = new NetworkCredential(<UserID>, <Password>); service.Url = new Uri(<Autodiscover で取得した接続先 URL>); |
ただし、現在の Office 365 環境では EWS の接続は基本認証 (Basic Authentication) のみサポートされており、上記の指定方法のままで接続すると [401 Unauthorized] で失敗します。
以下のように System.Net.CredentialCache を利用して明示的に基本認証が使用されるように構成することで Office 365 環境に EWS で接続することができます。
------- Exchange Web Services の例 ------- ExchangeServiceBinding esb = new ExchangeServiceBinding(); esb.RequestServerVersionValue = new RequestServerVersion(); esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2010_SP2; CredentialCache cache = new CredentialCache(); cache.Add(new Uri(<Autodiscover で取得した URL>), "Basic", new NetworkCredential(<UserID>, <Password>)); esb.Credentials = cache; esb.Url = <Autodiscover で取得した URL>; ---------- EWS Managed API の例 ---------- ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); CredentialCache cache = new CredentialCache(); cache.Add(new Uri(<Autodiscover で取得した URL>), "Basic", new NetworkCredential(<UserID>, <Password>)); service.Credentials = cache; service.Url = new Uri(<Autodiscover で取得した接続先 URL>); |
- 補足 (EWS で Autodiscover を実施する場合)
Office 365 では Autodiscover に関しても現在では基本認証のみサポートされておりますが、EWS で Autodiscover を実施する際には System.Net.NetworkCredential を利用して資格情報を設定する方法で特に問題はございません。
本内容については以下のコミュニティ サイトでも議論されていますので必要に応じてご参照ください。
Title: Delay on creation and ability to use EWS
URL: https://community.office365.com/en-us/f/148/t/5147.aspx