Windows認証を使用するWCFサービスがあり、それらを偽装して別のWCFサービスを呼び出したい場合、次のようにします。
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
// call another WCF service
}
すべての構成設定を設定しましたが、クライアント側に次の行が含まれている限り、正常に動作します。
client.ClientCredentials.Windows.AllowedImpersonationLevel = TokenImpersonationLevel.Delegation;
しかし、呼び出しを行う前に、ユーザー トークンに委任権限があることを確認するにはどうすればよいでしょうか。つまり、私が制御していないクライアントは、AllowedPersonationLevel を設定しましたか?
設定していない場合、あらゆる種類の奇妙な例外がスローされます (アセンブリ X を読み込めないなど)。
理想的には、次のことができるようになりたいです。
using (ServiceSecurityContext.Current.WindowsIdentity.Impersonate())
{
if (UserDoesntHaveDelegationRights())
throw new SecurityException("No delegation rights");
// call another WCF service
}
WindowsIdentity.GetCurrent().ImpersonationLevel
は常に に等しいことに注意してください。そのTokenImpersonationLevel.Impersonation
ため、残念ながらオプションではありません。