用于实现NTLM授权的C#帮助类

问题描述 投票:2回答:3

当前,我正在尝试解决我的问题-以我认为应该工作的方式在我的Intranet网站上实施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授权的第一阶段。是否可以通过使用准备使用的帮助程序来避免使用大量手动代码来执行其他步骤?

c# ntlm nancy
3个回答
1
投票

[如果您真的想自己写所有这些,我想您正处于艰巨的任务中。该URL可能会为您提供帮助,它通常具有有关NTLM身份验证的信息,但也显示了使用NTLM进行HTTP身份验证的对话示例:

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

另一种可能探索的途径是查看Mono代码库中是否有您可以利用的东西-这就是我们使用内置JSON序列化程序所做的。

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


1
投票

我已经开发了一些资源,并合并了整个协议的有效实现:“ 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-assemblies-in-asp-net.aspx仅供参考)


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.