IIS (.svc) でホストされている呼び出しごとの WCF サービスがあります。サービスのコンストラクターで、この記事に従ってThread.CurrentPrincipal = HttpContext.Current.Userを設定しました。この場合、HttpContext.Current.UserはMicrosoft.IdentityModel.Claims.ClaimsPrincipal型であり、カスタム パッシブ STS から送り返されたクレームを持っています。
ただし、サービス操作に入ってThread.CurrentPrincipalを調べるとすぐに、このオブジェクトはまだMicrosoft.IdentityModel.Claims.ClaimsIdentity型ですが、オブジェクト自体はHttpContext.Current.Userと同じではなくなります( IsAuthenticated = false 、 AuthenticationType = "" 、および Name が Thread.CurrentPrincipal.Identity で null である場合)、これらの値はすべてHttpContext.Current.Userで正しく入力されます。これは、何かが操作への呼び出しをインターセプトし、現在のプリンシパルを一般的な、空の、認証されていないクレーム プリンシパルに誤って変更していることを示しています。
コンストラクターと操作でスレッド ID を確認しましたが、両方の場所で同じであり、HttpContext.Current.Userから割り当てた後、即時ウィンドウでThread.CurrentPrincipalを評価すると、スレッド ID が正しく設定されていることがわかります。コンストラクターなので、コンストラクターとメソッドの間で何かが確実に実行されており、その何かが私のThread.CurrentPrincipalを変更しています。
誰がこれをしているのか、どうすればこの動作を防止/修正できるのか分かりますか?