3

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必要ないと思います。代わりに、ExchangeServiceImpersonatedUserIdプロパティを使用する必要があります。詳細はこちら 唯一の問題は、Exchange 2007 を実行していることと、サービス アカウントがすべてのユーザーを偽装できるようにするためのパワー シェル コマンド.Credentials(パラメーターにパスインを使用する) は、Exchange 2010 とのみ互換性があるように見えることです。

4

1 に答える 1

0

WebCredentials代わりに使用してみてくださいNetworkCredential-関連する SO 投稿を参照してください。EWSとAutoDiscover+に問題があるようですNetworkCredentials

于 2012-03-05T21:44:58.643 に答える