![](/img/trans.png)
[英]c# application with http interface needs to implement NTLM authentication
[英]C# helper classes to implement NTLM authorization
目前我正在嘗試解決我的問題——這是在我的 Intranet 站點上以我認為它應該如何工作的方式實現 NTLM 授權,即僅在某些頁面上詢問密碼。 不只是點擊主頁 - 所以網站應該分為兩部分:對所有人可用和受限制。
我使用的是 Nancy 框架的問題,它本身沒有實現 NTLM。 但這並不能阻止真正的牛仔程序員。 所以我正在嘗試開發自定義請求/響應序列來實現這個目標。
現在我已經發現了這個 Q&A ,但是那里的解決方案粘在 IIS ...
我發現了包含大量有關 NTLM 的復雜信息的站點,我想知道是否有任何 C# 類可以簡化此過程?
即,幫助創建不同類型的響應。
目前我的代碼如下所示:
Get["/Profile/"] = parameters =>
{
var request = this.Request;
if (this.Request.Headers.Keys.Any(x => x == "Authorization"))
{
var items = Response.Context.Items;
var expert = new Expert(WindowsIdentity.GetCurrent());
var model = expert.Ensure();
return View["Profile.liquid", model];
}
else
{
var response = new Response();
response.StatusCode = HttpStatusCode.Unauthorized;
response.Headers.Add("WWW-Authenticate", "NTLM");
return response;
}
};
但它只實現了 NTLM 授權的第一階段。 是否可以通過使用即用型助手來避免大量手動代碼來實現其他步驟?
如果您真的想自己編寫所有這些,我認為您將面臨一項艱巨的任務。 這個 URL 可能對你有幫助,它有關於 NTLM 身份驗證的一般信息,但也顯示了使用 NTLM 進行 HTTP 身份驗證的對話示例:
http://davenport.sourceforge.net/ntlm.html#ntlmHttpAuthentication
另一個可能的探索途徑是查看 Mono 代碼庫中是否有任何您可以使用的內容 - 這就是我們對內置 JSON 序列化程序所做的。
另一種選擇是使用表單或基本身份驗證,但根據 AD/LDAP 對用戶名/密碼進行身份驗證。
我已經開發,合並了幾個來源,整個協議的工作實現:“NTLM”->“帶有客戶端數據的 NTLM”->“NTLM 挑戰”->“來自客戶端的 NTLM 挑戰”,一切運行良好,不需要外部庫。 唯一的小問題是所有 C++(討厭在 C# 中使用緩沖區:P),它是一個 140kb 的 C++ 源代碼。 一切都可以在這里找到: https : //kendar.org/?p=/dotnet/kendarntlmlib
--這里開始壞消息...--
據我在 IIS 上的理解,這種事情只能作為 ISAPI 過濾器工作。 作為 NTLM 一個基於連接的協議,我無法在 MVC 控制器、aspx 頁面或 ashx 處理程序中時在同一個 http 請求中執行請求-響應-請求。 而且 IIS 沒有公開任何可用於“覆蓋”http 的標准無連接方法的套接字句柄,但在 ISAPI 部分......(畢竟它是 HTTP,但它正在削減我的翅膀:P)
我希望像我在 Bonobo github 克隆上看到的基本身份驗證屬性一樣使用它......但沒有運氣......
--這里結束壞消息--
另外,我在將本機 DLL 加載到 C#-ANyCPU 編譯項目中時遇到了一些問題,但這很容易 :P ( http://blogs.msdn.com/b/jorman/archive/2007/08/31/loading-c- assembly-in-asp-net.aspx僅供參考)
我需要一個使用https://github.com/toolchain/Nancy.Authentication.Ntlm並限制用戶對某些 Nancy 視圖的示例。 謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.