簡體   English   中英

實現 NTLM 授權的 C# 助手類

[英]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.

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