1

Windows サービスでホストされている、TCP バインディングを使用する WCF サービスがあります。WCF サービスは、ASP.NET Web アプリケーションによって呼び出されます。

WCF サービスが呼び出されたときに、呼び出し元の ID が特定のローカル グループのメンバーであるかどうかを確認したいと思います。これを行ういくつかの方法は次のとおりです。

[PrincipalPermission(SecurityAction.Demand, Authenticated = true, Role = "MyGroupName")]

Thread.CurrentPrincipal.IsInRole("MyGroupName");

new WindowsPrincipal(ServiceSecurityContext.Current.WindowsIdentity).IsInRole("MyGroupName")

ASP.NET Web アプリケーションが Windows 2003/IIS6 でホストされている場合、NETWORK SERVICE アカウントで実行されます。つまり、WCF コードを正しく実行するには、ネットワーク サービスをローカル グループに追加する必要があります。ただし、アカウントをグループに追加してアプリケーションをテストすると (上記の方法のいずれかを使用してグループ メンバーシップをテストします)、コードは NETWORK SERVICE がグループのメンバーではないと見なしているようです。

同じグループ メンバーシップ テストを実行する単純な ASP.NET ページを作成しました。iisresetを実行した後、Web ページは NETWORK SERVICE がグループに参加したことだけを認識することがわかりました。ただし、IIS をリセットしても、WCF サービスに違いはありません。WCF サービスをホストしている Windows サービスを再起動してみましたが、違いはありませんでした。NETWORK SERVICE がグループのメンバーであることを WCF コードが認識したのは、コンピューターを再起動した 1 回だけでした。

単純な ASP.NET ページと WCF サービスの動作に違いがある理由を理解しようとしています。特に、同じコードを使用していて、両方が同じ ID 名 (NT AUTHORITY\NETWORK SERVICE) を報告している場合にそうです。誰か知っていますか?

この問題は、Windows 2008 (Web アプリケーションも NETWORK SERVICE で実行されている) または Windows 2008 R2 (アプリケーション プール ID アカウントとして実行されている) では発生しません。

助けてくれてありがとう!

4

0 に答える 0