【发布时间】:2012-12-10 17:10:51
【问题描述】:
目前我正在尝试解决我的问题 — 以我认为应该如何工作的方式在我的 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 授权的第一阶段。是否可以通过使用即用型助手来避免大量手动代码来实现其他步骤?
【问题讨论】:
-
万一英语不是你的第一语言,你知道“牛仔程序员”是一个贬义词吗?
-
@Ben,你说得对,英语不是我的第一语言。但我知道“牛仔程序员”的成语。这是绝望引起的讽刺。支持如果 Windows 授权在 IIS、ASP.NET MVC 中很差,如我所见。而在南希,它根本不存在。而且我几乎需要不惜一切代价实施它......
-
您可以 p/invoke SSPI msdn.microsoft.com/en-us/library/windows/desktop/… 并且您可能能够通过 NTLM 验证密码...这可能取决于您的用户的 AD 权限运行你的进程。但是为什么不直接在 IIS 下运行 Nancy 并让它处理身份验证呢?
-
@EdwardThomson 我试图让 Nancy 使用 IIS,但据我所知,我能得到的最好的结果是以下行为: IIS 在网站的第一页询问密码(而我需要保护只有个人资料区域),除非使用关闭浏览器,否则无法注销(而我需要或多或少地保持这种情况的灵活性)。
-
我认为即使是虚拟路径,IIS 中也有配置设置,但我不知道。关于第二部分,SPNEGO (NTLM/Kerberos) 没有“注销”,这些凭据将始终在请求时提供(如果远程服务器是可信的)。