C#helper类实现NTLM授权

时间:2012-12-10 17:10:51

标签: c# ntlm nancy

目前我正在尝试解决我的问题 - 这是我的内部网站点上实现NTLM授权的方式,我认为它应该如何工作,即仅在某些页面上询问密码。不仅仅是访问主页 - 所以网站应该分为两部分:全部可用且受限制。

我正在使用Nancy框架的问题并没有本地实现NTLM。但这不会阻止真正的牛仔程序员。所以我正在尝试开发自定义请求/响应序列来实现这个目标。

现在我发现了this Q&A,但是解决方案已经粘在IIS上了......

我发现site有很多关于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授权的第一阶段。是否可以通过涉及随时可用的帮助程序来避免大量手动代码来实现其他步骤?

3 个答案:

答案 0 :(得分:1)

如果你真的想自己写这些,我认为你有一个庞大的任务。此URL可能对您有所帮助,它通常包含有关NTLM身份验证的信息,但还显示了使用NTLM进行HTTP身份验证的对话示例:

http://davenport.sourceforge.net/ntlm.html#ntlmHttpAuthentication

另一个可以探索的途径是查看Mono代码库中是否有任何可以使用的内容 - 这就是我们使用内置的JSON序列化程序所做的。

另一种选择是使用表单或基本身份验证,但是针对AD / LDAP验证用户名/密码。

答案 1 :(得分:1)

我已经开发出来,合并了几个来源,整个协议的工作实现: “NTLM” - >“NTLM与客户端数据” - >“NTLM质询” - >“NTLM挑战来自客户端”,一切运行良好,无需外部证书。只有小问题是所有C ++(讨厌在C#中使用缓冲区:P),它是一个140kb的C ++源代码。 一切都可以在这里找到:http://www.kendar.org/?development/cpp/ntlm-authentication-protocol.html

- 在这里开始新闻...... -

据我所知,在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-assemblies-in-asp-net.aspx仅供参考)

答案 2 :(得分:0)

我需要一个使用https://github.com/toolchain/Nancy.Authentication.Ntlm的用户限制某些Nancy视图的示例。谢谢!