2

netTcp エンドポイントを使用して公開され、Windows 認証 ( Transportsecurity およびclientCredentialType="Windows") を使用して構成された IIS7 でホストされている WCF サービスを実行していますが、これはすべて正常に機能します。

このサービスでは、EWS API を使用してメールを送信し、Exchange サーバーの受信トレイを確認しています。開発中の時点で、NetworkCredential渡すオブジェクトを作成して Credentials プロパティを手動で指定した限り、これは部分的に機能しています。

私がやりたいことは、サービスを呼び出しているユーザーの ID を使用して、ユーザーとしてメールを送信し、受信トレイを反復処理できるようにすることです。

を使用して、呼び出し元のユーザーの詳細にアクセスできます

ServiceSecurityContext.Current.PrimaryIdentity

IIdentityしかし、これは、Exchange サーバーへの接続を作成するために必要な資格情報ではなく、オブジェクトを返します。

NetworkCredential私が持っていないパスワードなしでは明らかにオブジェクトを作成することはNetworkCredentialできませんIIdentity

これを達成する方法があるはずです。すべての提案を歓迎します。

4

1 に答える 1

3

どうですか

using(ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
    ExchangeService service = new ExchangeService(...)
    service.UseDefaultCredentials = true; 

}

サーバーを呼び出すクライアントは、委任を許可する必要があります。

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;

WCFサーバーがlocalSystemまたはNetworkServiceアカウントを使用して実行されている場合は、ADのコンピューターアカウント(通常はネットワーク管理者の仕事)の[委任に信頼されている]プロパティも有効にする必要があります。別のドメインユーザーアカウントを使用して実行する場合は、そのアカウントの「委任に信頼」プロパティを有効にして、サーバーのサーバープリンシパル名(SPN)を作成する必要があります。正直なところ、私はNetworkServiceアカウントを使用することを好むので、自分でそれをしたことはありません。彼女はいくつかのリンクを持っています:ここここそしてここ

于 2013-03-13T16:24:59.717 に答える