2012-09-18 207 views
0

我在ASP.NET中創建基於MVC3的Intranet應用程序。該應用程序是非常簡單的:
- 要求輸入(用戶名)
- 管道腳本輸出到HTML文件
- - 重定向到創建的HTML文件中使用提供的用戶名(獲取從遠程數據庫中的一些數據)
運行PowerShell腳本。

出於安全原因,我使用Windows身份驗證,僅對特定用戶組進行訪問。這對於應用程序本身非常有用 - 我可以在角落看到當前的用戶名,而不是指定的用戶無權訪問。

問題是PS腳本本身。它似乎沒有與用戶的憑據一起工作,所以我將whoami行添加到腳本並得到結果:iis apppool\asp.net v4.0

這是我用來運行PS腳本代碼:
ASP.NET - 使用傳遞身份驗證(Windows身份驗證)運行PowerShell腳本

var ps = PowerShell.Create(); 
ps.Commands.AddScript(@"CommandHere"); 
ps.Invoke(); 

我如何使用當前用戶的憑據運行它?

+0

爲什麼不直接通過Windows進行腳本授權。它將使用Windows憑據。在你的asp.net表單中添加驗證,只允許任何人訪問。 http://blogs.msdn.com/b/dvespa/archive/2010/02/22/how-to-use-windows-authentication-with-the-pscredential-class.aspx – Botonomous

+0

我很安靜PowerShell和ASP.NET新手。你能給我更多的細節如何在我的代碼中使用它嗎? –

回答

0

我有我的內網同樣的問題

我嘗試: 的web.config

<runtime> 
    <!--http://blogs.msdn.com/b/powershell/archive/2007/09/10/impersonation-and-hosting-powershell.aspx--> 
    <legacyImpersonationPolicy enabled="false"/> 
    <alwaysFlowImpersonationPolicy enabled="true"/> 
</runtime> 

在我的控制器

 // http://support.microsoft.com/kb/306158 
     System.Security.Principal.WindowsImpersonationContext impersonationContext; 
     impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); 

     ViewBag.Message = "User Powershell : " + PSRunner.ExecuteScript("Whoami;") + " > user C# : " + System.Security.Principal.WindowsIdentity.GetCurrent().Name + " User Authentifier : " + User.Identity.Name + " type " + User.Identity.GetType(); 

     impersonationContext.Undo(); 

我有我的網頁上相同的結果:

User Powershel : iis apppool\www.site.com > user C# : DOMAIN\alopez User Authentifier : DOMAIN\alopez type System.Security.Principal.WindowsIdentity