簡體   English   中英

在ASP.NET/C#頁面中提示輸入憑據,並傳遞給PowerShell

[英]Prompt for credentials in ASP.NET / C# page, pass to PowerShell

我正在尋找一個概念證明/演示網頁,它將:

  • 作為服務運行(最初不需要身份驗證)
  • 提示輸入憑據(即,允許提供備用憑據,最好將其捕獲為System.Management.Automation.PSCredential)。 這里不需要身份驗證,我只需要捕獲憑據即可。
  • 將憑據傳遞到PowerShell(例如shell.Commands.AddArgument(pscred))
  • 在PowerShell中使用這些憑據(作為憑據傳入,或轉換為System.Management.Automation.PSCredential)
  • 需要說明的是:我不想認證憑據。 我只是想以安全的方式收集它們。 就目前我所關心的而言,這簡直是胡言亂語,但我想保護的卻是胡言亂語

我有一個使用Visual C#的ASP.NET Web應用程序項目(類似於此處的 )。 我已經啟動並運行該頁面(即,它使用適當的帳戶運行,它運行PowerShell等)-我想以一種相當安全的方式提示和存儲憑據。 我認為有一些標准的方法可以做到這一點。 還是因為這是服務器端應用程序,我是否對此讀得太多?

到目前為止,這是我的代碼摘錄:

  • Default.aspx(根據情況將更改):

     <asp:TextBox ID="Input" runat="server" TextMode="MultiLine" Width="400px" Height="73px" ></asp:TextBox> <asp:TextBox ID="InputParam" runat="server" TextMode="MultiLine" Width="200px" Height="20px" ></asp:TextBox> <asp:Button ID="ExecuteCode" runat="server" Text="Execute" Width="200" onclick="ExecuteCode_Click" /> <asp:TextBox ID="ResultBox" TextMode="MultiLine" Width="700" Height="200" runat="server"></asp:TextBox> <asp:TextBox ID="ErrorBox" TextMode="MultiLine" Width="700" Height="200" runat="server"></asp:TextBox> 
  • Default.aspx.cs:

     protected void ExecuteCode_Click(object sender, EventArgs e) { // Clean the Result TextBox ResultBox.Text = string.Empty; // Initialize PowerShell engine var shell = PowerShell.Create(); // Add the script and an argument to the PowerShell object shell.Commands.AddScript(Input.Text); shell.Commands.AddArgument(InputParam.Text); // Execute the script var results = shell.Invoke(); // display results, with BaseObject converted to string // Note : use | out-string for console-like output if (results.Count > 0) { // We use a string builder ton create our result text var builder = new StringBuilder(); foreach (var psObject in results) { // Convert the Base Object to a string and append it to the string builder. // Add \\r\\n for line breaks builder.Append(psObject.BaseObject.ToString() + "\\r\\n"); } // Encode the string in HTML (prevent security issue with 'dangerous' caracters like < > ResultBox.Text = Server.HtmlEncode(builder.ToString()); } //Collect errors var PSErrors = shell.Streams.Error.ReadAll(); if (PSErrors != null) { // We use a string builder ton create our error text var builder = new StringBuilder(); foreach (var psError in PSErrors) { // Convert the exception Object to a string and append it to the string builder. // Add \\r\\n for line breaks builder.Append(psError.Exception.ToString() + "\\r\\n"); } // Encode the string in HTML (prevent security issue with 'dangerous' caracters like < > ErrorBox.Text = Server.HtmlEncode(builder.ToString()); } } 
  • 根據我的理解, 此代碼將行不通,但該概念正是我要執行的操作。

     PSCredential pscred = this.Host.UI.PromptForCredential("Enter username/password","", "", ""); shell.Commands.AddArgument(pscred); 

我認為最簡單的方法是使用模擬。 即,您獲得了用戶的憑據,然后以該用戶身份啟動Powershell進程,從而可以以該用戶身份執行所需的任何操作。

看到:

使用用戶模擬從ASP.NET執行PowerShell cmdlet-具有模擬當前用戶以運行PowerShell的步驟

要么

如何從帶有模擬的ASP.NET運行PowerShell腳本 -有關如何以模擬運行PowerShell的StackOverflow問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM