2016-08-30 5 views
0

から、私は次のようにDPAPI ProtectDataを使用しています:
DPAPI ProtectData異なるユーザ

temp = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,....31 }; 

私は.exeファイルからこのコードを実行したい:

var temp = new byte[32] 
{ 
    1,1,1,1,1,1,1,1, 
    2,2,2,2,2,2,2,3, 
    3,3,3,3,3,3,3,3, 
    4,4,4,4,4,4,4,4 
}; 

ProtectedData.Protect(temp, null, DataProtectionScope.CurrentUser); 
string userName = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

は一時見た目が好きになりましたことを前提としています私のWebService(IIS)からも取得できます。
問題は、現在のユーザーがMyDomain/Administratorで、WebServiceからコードを実行している場合、現在のユーザーがIIS APPPOOL/MyAppであることです。

どうすればこの問題を解決できますか? 私はWebServiceから次のように.exeファイルを実行しようとしています:

Process.Start(@"C:\myexe.exe"); 

をするが、そのいくつかの理由から働いていた(私は自分のIISアプリケーションへのフルアクセスを持っている)と、とにかく私はこれがあると思ういけないではありませんこの場合の正しい解

注:DataProtecitonScope.LocalMachineを使用しない場合は、セキュリティ上の理由から、私はあなたが開始するLocalMachineとして、それをインストールすることができ、DataProtectionScope.LocalMachineからDataProtectionScope.CurrentUser

答えて

0

問題は解決しました。
ローカルユーザーからIISアプリケーションを実行しています。
これは、アプリケーションプールを選択し、アクションペインメニューの[アドバンス設定...]をクリックすると見つかります。 [アイデンティティ]を選択し、リストされている現在のユーザーの横にあるボタンをクリックします。カスタムアカウントを選択し、[設定]をクリックします。ユーザー名にdomain¥usernameの形式を使用し、ユーザーのパスワードを入力します。

1

に変更傾けます。次に、WebServiceを解読させてから、CurrentUserで再暗号化します。古い値は必ず削除してください。このようにして、LocalMachineから取得し、適切なユーザーが実行されたらロックダウンすることができます。

これは、キーをLocalMachineのレベルで一時的に公開したままにします。

もう1つの解決策は、LocalMachineを使用し、2つの実行可能ファイルの間でシークレットを共有して追加のエントロピー機能を使用することです。これは、アプリケーションに知られているわかりにくい値(「実際の」セキュリティなし)またはユーザーが入力したパスワードになります。ユーザーが提供するパスワードソリューションは、より安全ですが、痛みやプログラミングのオーバーヘッドが増えます。

インストールとWebServiceの実行間隔が狭い場合は、最初の解決策が適している可能性があります。

関連する問題