繁体   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