在 WinForms 中驗證使用者(與 ASP.Net 無關)
最初發佈在 StackOverflow 上,按照 SO 評論中的建議在此處交叉發布。
介紹
我需要對我的應用程序中的某些操作進行密碼保護,例如載入/保存文件、點擊複選框等。這是一個標準的 C# .Net 4.0 WinForms 應用程序,它將在公司網路中的 Windows 7 上執行。
我正準備使用使用者/密碼/權限(散列和加鹽)的文本文件推出我自己的非常基本的系統(使用敞開的後門進行讀取混淆),直到經過一番搜尋後,我發現看起來非常 簡單的方法,但我我很難找到與 ASP.NET無關的角色的好教程。
問題
有沒有人知道一個或多個向我展示如何:
- 創建一個 Windows 使用者/組並給該使用者/組一個
Role
或權限。
- 請注意,我正在從我公司的聯網筆記型電腦上對此進行測試,但會將其部署在客戶的公司網路上(不確定這是否是一個問題,或者這會變得多麼棘手)。
- 創建 winforms/console 應用程序範例,即使只有一個方法,如果我通過身份驗證,列印“Hello World”,如果我不是,則拋出異常?
- 我從來沒有做過網路管理員或任何相關的事情,我一直在閱讀有關 Active Directory 和本地使用者與網路使用者的內容……我希望有一種方法可以建構一個
Interface
並詢問 Windows 目前使用者是否具有權限ABC和不太關心Windows是如何計算出來的。然後我可以為每個本地/網路/ActiveDirectory/等做一個具體的實現。根據需要案例(或者如果需要……因為我現在還不知道)。背景
- read if interested, but not required to answer question
只是為了確保我在這裡朝著正確的方向前進,基本上我需要/想要在我的開發 PC 上對此進行測試,以確保它將為我的客戶提供良好的最終使用者體驗。問題是目前他們為每台執行我的應用程序的電腦執行一個自動登錄腳本,並且有幾個不同的操作員全天使用我的應用程序。客戶希望對我的應用程序的某些功能進行密碼保護,並且只向某些運營商提供密碼保護。我安裝這個沒有問題,因為我已經期待了一段時間的請求,我只是以前從未程式過身份驗證。
我認為值得說服我的客戶為每個運營商提供自己的網路帳戶並為該運營商或組分配他們想要的任何權限,以防他們需要解僱某人,更改權限等。這也意味著我只需打開幾個選項他們可以根據內部公司政策對這些權限進行分組,但是他們認為合適,我真的不必擔心(但如果我必須自己動手,因為他們是 IT 部門幾乎一無所知)我的應用程序)。
據我所知,它也讓我的生活變得更輕鬆,因為不必處理散列密碼和加密等,只需處理點擊這個或那個按鈕所需的角色。
我不知道目前在基於 .NET 的應用程序中進行授權的“最佳實踐”方法是什麼。這是我多年前在我編寫的一個基於 Web 的應用程序中所做的事情,用於將所有授權功能解除安裝到作業系統本身。(這可能會成為一個狡猾的黑客,首先是系統管理員,然後是開發人員。)
- 我列舉了應用程序中的所有權限,並在目錄層次結構中創建了文件,以便有選擇地提供給分配給適當角色的使用者。(這些文件不包含任何內容——正如您將在下面看到的,我只是檢查了使用者是否可以讀取該文件。)
- 創建了標識應用程序使用者角色的 Active Directory 組。
- 為 Active Directory 組分配了讀取我在前面步驟中創建的文件的權限。
當使用者向應用程序(基於 Web)進行身份驗證時,會嘗試訪問每個“權限”文件。基於哪個成功/失敗,應用程序可以確定使用者分配的“角色”。
對於客戶的 IT 部門來說,更改應用程序的權限是更改“權限”文件上的 ACL(如果他們需要進行徹底更改),或者更常見的是更改使用者組成員身份。
我喜歡這種方法,因為它可以很好地處理所有“邊緣情況”——嵌套組成員資格、來自外國森林的安全主體等。這也很好,因為如果將這些權限文件重新定位到 Windows Server 2012 機器,我的應用程序突然“免費”獲得了新的動態訪問控制功能。