asp.net Web アプリケーションを閲覧しているユーザーの資格情報を EWSFindAppointments
呼び出しに渡すことはできますか?
アクティブなブラウジング ユーザーのカレンダーの詳細を返そうとしているだけです。このユーザーは間違いなく自分のカレンダーを読み取る権限を持っているため、この問題は、ここで説明されている EWS API を使用した Exchange の偽装に関連するものではありません。
以下のコードは、localhost の実行時に問題なく動作しますが、Web サーバーから実行すると、Windows 認証と ID 偽装が構成されているにもかかわらず、アクセス拒否エラーがスローされます。
using (HostingEnvironment.Impersonate())
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
service.UseDefaultCredentials = true;
service.AutodiscoverUrl(UserEmailAddress);
Mailbox mb = new Mailbox(UserEmailAddress);
FolderId cfCalendarFolderID = new FolderId(WellKnownFolderName.Calendar, mb);
CalendarView cvCalendarView = new CalendarView(DateTime.Now, DateTime.Now.AddDays(30), 1000);
cvCalendarView.MaxItemsReturned = 3;
おそらく、HostingEnvironment
資格情報をExchangeService
オブジェクトに渡す簡単な方法がありませんか?
内容を確認する方法はありservice.UseDefaultCredentials
ますか?
Windows認証の偽装ユーザーからパスワードを取得する方法がないため、次を使用できません。
service.Credentials = new System.Net.NetworkCredential(username, password, domain);
私も次のことを試しましたが、同じ ServiceResponseException アクセス拒否エラーが発生します。
service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
service.PreAuthenticate = true;
どうぞよろしくお願いいたします。
関連する場合と関連しない場合がある追加情報:
- Web サイトのアプリケーション プール ID は です
NetworkService
。 UserEmailAddress
変数は、に基づく AD ルックアップから設定されます。System.Security.Principal.WindowsIdentity.GetCurrent().Name
編集(2012 年 8 月 14 日) 上記のやりたいことを達成するためには、HostingEnvironment.Impersonate
必要ないと思います。代わりに、ExchangeService
のImpersonatedUserId
プロパティを使用する必要があります。詳細はこちら
唯一の問題は、Exchange 2007 を実行していることと、サービス アカウントがすべてのユーザーを偽装できるようにするためのパワー シェル コマンド.Credentials
(パラメーターにパスインを使用する) は、Exchange 2010 とのみ互換性があるように見えることです。