2011-09-08 6 views
0

新しい偽装されたWindowsユーザーが認証されていることを実行中のWPFアプリケーションに通知する方法を探しています。私はWCF & NetNamedPipeBinding経由でこれを行うことができると思ったが、私はコールバックを介して偽装されたWindowsIdentityを流すことができない。WCFコールバック経由でクライアントのWindowsIdentityまたはWindowsPrincipal/IPrincipalを送信しますか?

WPFクライアント認証アプリケーション(認証ユーザー) - > WCF Windowsサービス(ユーザーが変更した実行中のアプリケーションにコールバック経由で通知) - > WPF実行中のアプリケーション(コールバック経由で新しいWindowsIdentityを取得するServiceControlContextはIPrincipalに基づいて新しい権限でアプリケーションを更新します)

私は偽装を使用して新しい認証ユーザーを偽装し、ServiceSecurityContext.Currentを使用して既に実行中のWPFアプリケーションへのコールバック中にクライアントアプリケーションのWindowsIdentityを取得できると思ったが、可能であるように思われる。

私は基本的に次のことをやろうとしている:

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/ee23ff54-80da-47f4-946d-5c2d77e81309

私は新しいWindowsIdentityの既に実行中のアプリに通知することができる方法上の任意のアイデアを?アドバイスをいただければ幸いです。

+0

あなたが実際にコールバックで身元を偽装しようとしています(参照フォーラムのポストを尋ねたものである)、または実行それをデータとして送信したいだけですか? –

+0

この時点で、私はいずれか(どちらがうまくいけばよい)しても構いません。データとして送信したり、コールバックでIDを偽装することができれば、どちらのソリューションでも有益です。 – CaMiX

答えて

1

だから、このcouldn」コールバックで達成することができましたが、私は委任を介して私が望んでいたことを達成することができました。ターゲットアプリケーションでWCFサービスを実装し、中間のサービス(WCF Windowsサービス)がWindowsIdentityに通知または送信するターゲットアプリケーションのWCFサービスを呼び出す必要がありました。

中のサービス:

[OperationBehavior(Impersonation = ImpersonationOption.Required)] 
public void MyServiceMethod(){ 
    DoStuff(); 
    ServiceSecurityContext securityContext = ServiceSecurityContext.Current; 

    using (securityContext.WindowsIdentity.Impersonate()) { 
      EndpointAddress backendServiceAddress = new EndpointAddress("net.pipe://localhost/TargetAppService"); 

      ChannelFactory<IService> channelFactory = new ChannelFactory<IService>(new NetNamedPipeBinding(), backendServiceAddress); 
      IService channel = channelFactory.CreateChannel(); 

      channel.SetIdentity(); 
    } 
} 

ターゲットアプリケーションのサービス:

[OperationBehavior(Impersonation = ImpersonationOption.Allowed)] 
    public void SetIdentity() { 
     ServiceSecurityContext securityContext = ServiceSecurityContext.Current; 
     if (securityContext != null && securityContext.WindowsIdentity != null) { 
      Console.WriteLine("Identity's Username: "+securityContext.WindowsIdentity.Name); 
     } 
    } 
0

コールバッククライアントで新しく認証されたユーザーに関する情報が必要な場合は、関連情報を含むカスタムDTOを渡すことをお勧めします。

(認証されたWindowsIdentityは任意のコールバッククライアントへのサービスから送信されるように許可することは、それがWCFでは動作しない理由おそらくである、いくつかの恐ろしいセキュリティホールを開けるでしょう。)

+0

残念ながら、私はIPrinciapl(WindowsPrincipal)に依存する変更不可能な従来のAPIに対処しなければならないので、これを行うことはできません。 – CaMiX

+0

彼らはIPrincipalだけを必要としますか、あるいは本当にWindowsPrincipalが必要ですか? –

関連する問題