だから私はこれに頭をぶつけてきました。私は自己ホスト型の WCF サービスを持っています:
var webServiceHost = new WebServiceHost(helloWorld);
webServiceHost.Authorization.ImpersonateCallerForAllOperations = true;
var uri = new Uri(BaseUri + webService.UriDirectory);
var webHttpBinding = new WebHttpBinding(webHttpSecurityMode);
webHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;
var sep = webServiceHost.AddServiceEndpoint(IHelloWorld, webHttpBinding, uri);
var webHttpBehavior = new WebHttpBehavior {HelpEnabled = true};
sep.Behaviors.Add(webHttpBehavior);
webServiceHost.Open();
メソッドに次の属性を適用しました。
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public List<GpoItem> GetAll()
{
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
// Execute GPO code here...
return new List<GpoItem>();
}
}
もう少しコンテキストを追加するために、私は基本的に、人が Web ページにログインし、ドメインに GPO を作成できるようにする Web サービスを用意しています。ログインしたドメインユーザーとして実行しているため、コンソールでこれを実行しても問題なく動作します。Windows サービスとして実行すると、「アクセスが拒否されました」という例外がスローされます。したがって、なりすましの必要性。上記の次の変更されたコードを挿入すると、「操作エラーが発生しました。(HRESULT からの例外: 0x80072020)」。まだ許可の問題であることを示すグーグル。管理者として Web サービスのテスト環境にログインしているため、フル アクセスが可能であり、管理者としてコンソールで問題なく実行できることを示しました。どこかでフラグ設定が欠けているような気がします。
何か案は?
[Update1]サービスをローカル システムからネットワーク サービスに切り替えてみましたが、それでも同じ問題が発生します。
[Update2] WCF サービスをホストしているサーバー (ローカル システムとして実行されている) にログオンし、そのマシンで直接ブラウザーを使用すると、すべて正常に動作します。ユーザー認証の委任に関する問題のようです...ここではまだ不明です。