0

ローカルネットワークで使用したいアプリに対して、次の設定があります。

Silverlight Client App -> Web Server (data objects etc) | -> Exchange
                                                        | -> SQL Database

他のすべては正常に機能し、DBなどからデータを取得できます(Windows認証ではなくSQLにSQL認証を使用していることに注意してください)が、ExchangeWebサービスを使用してExchangeから現在のユーザーのカレンダーエントリを取得しようとするとエラーが発生します401 unauthorised

これはすべて、デフォルトのApplicationPoolIdentityを使用して従来のASP.NET 4アプリプールで実行されているローカル開発サーバー(私のマシン上)で実行されています。私はSSL経由ではなく、ポート81を経由します

接続して自分のカレンダーエントリを取得できますが、他のユーザーの場合はエラーが発生します

偽装コードなしで試してみるとConnection did not succeed. Please try again later、EWSがドメインログオンのないApplicationPoolIdentityを使用していると想定しているため、エラーが発生します。

私は次のコードを使用して偽装しました(未処理の可能性のある例外/セキュリティホールは今のところ無視してください!):

var impersonationContext = ((System.Security.Principal.WindowsIdentity)System.Threading.Thread.CurrentPrincipal.Identity).Impersonate();

// Use default credentials
service.UseDefaultCredentials = true;

// Get the target folder ID using the email address
var folder = new FolderId(WellKnownFolderName.Calendar, new Mailbox(emailAddress));

// Get the appointments
var response = service.FindAppointments(folder, view);

impersonationContext.Undo();


// Return list of appointment entities
return response.Items;

を見ると、メソッドが呼び出されたSystem.Security.Principal.GetCurrent()後、ユーザーが偽装したいユーザーのIDに変更されていることがわかります。ImpersonateAuthenticationTypeはKerberosであり、ImpersonationLevelはですImpersonate。私が見る限り、これは機能するはずですが、私のWebサーバーはExchangeで正常に認証することを望んでいないようです。

セットアップまたは交換で何かが足りませんか?

4

1 に答える 1

-2

これは最終的には機能することになりました-それはいくつかの交換設定であり、システムプリンシパルの代わりに現在のスレッドプリンシパルを使用することになりました

于 2013-08-22T10:46:28.597 に答える