在 Katana 中启用 Windows 身份验证
本文介绍如何在 Katana 中启用 Windows 身份验证。 它涵盖两种方案:使用 IIS 托管 Katana,以及使用 HttpListener 在自定义进程中自托管 Katana。 感谢巴里·多兰斯、大卫·马特森和克里斯·罗斯查看本文。
Katana 是 Microsoft 实现 的 OWIN,即适用于 .NET 的开放 Web 接口。 可 在此处阅读 OWIN 和 Katana 简介。 OWIN 体系结构具有多个层:
- 主机:管理运行 OWIN 管道的过程。
- 服务器:打开网络套接字并侦听请求。
- 中间件:处理 HTTP 请求和响应。
Katana 目前提供两个服务器,这两个服务器都支持 Windows 集成身份验证:
- Microsoft.Owin.Host.SystemWeb。 将 IIS 用于 ASP.NET 管道。
- Microsoft.Owin.Host.HttpListener。 使用 System.Net.HttpListener。 自承载 Katana 时,此服务器当前是默认选项。
注意
Katana 目前不提供用于 Windows 身份验证的 OWIN 中间件,因为此功能已在服务器中提供。
IIS 中的 Windows 身份验证
使用 Microsoft.Owin.Host.SystemWeb,只需在 IIS 中启用 Windows 身份验证即可。
首先,使用“ASP.NET 空 Web 应用程序”项目模板创建新的 ASP.NET 应用程序。
接下来,添加 NuGet 包。 在 “工具 ”菜单中,选择“ NuGet 包管理器”,然后选择“ 包管理器控制台”。 在“Package Manager Console”窗口中,输入以下命令:
Install-Package Microsoft.Owin.Host.SystemWeb -pre
现在,使用以下代码添加名为 的 Startup
类:
using Owin;
namespace KatanaWebHost
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.Run(context =>
{
context.Response.ContentType = "text/plain";
return context.Response.WriteAsync("Hello World!");
});
}
}
}
这就是为在 IIS 上运行的 OWIN 创建“Hello world”应用程序所需的全部内容。 按 F5 调试该应用程序。 应在浏览器窗口中看到“Hello World!”。
接下来,我们将在 IIS Express 中启用 Windows 身份验证。 在“ 视图 ”菜单中,选择“ 属性”。 单击解决方案资源管理器中的项目名称以查看项目属性。
在 “属性” 窗口中,将 “匿名身份验证 ”设置为 “已禁用 ”,并将 “Windows 身份验证 ”设置为 “已启用”。
从 Visual Studio 运行应用程序时,IIS Express将需要用户的 Windows 凭据。 可以使用 Fiddler 或其他 HTTP 调试工具查看此内容。 下面是 HTTP 响应示例:
HTTP/1.1 401 Unauthorized
Cache-Control: private
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/8.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
X-Powered-By: ASP.NET
Date: Sun, 28 Jul 2013 07:28:51 GMT
Content-Length: 6062
Proxy-Support: Session-Based-Authentication
此响应中的WWW-Authenticate标头指示服务器支持使用 Kerberos 或 NTLM 的 Negotiate 协议。
稍后,将应用程序部署到服务器时, 请按照以下步骤 在该服务器上启用 IIS 中的 Windows 身份验证。
HttpListener 中的 Windows 身份验证
如果使用 Microsoft.Owin.Host.HttpListener 自承载 Katana,则可以直接在 HttpListener 实例上启用 Windows 身份验证。
首先,创建新的控制台应用程序。 接下来,添加 NuGet 包。 在 “工具 ”菜单中,选择“ NuGet 包管理器”,然后选择“ 包管理器控制台”。 在“Package Manager Console”窗口中,输入以下命令:
Install-Package Microsoft.Owin.SelfHost -Pre
现在,使用以下代码添加名为 的 Startup
类:
using Owin;
using System.Net;
namespace KatanaSelfHost
{
class Startup
{
public void Configuration(IAppBuilder app)
{
HttpListener listener =
(HttpListener)app.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemes =
AuthenticationSchemes.IntegratedWindowsAuthentication;
app.Run(context =>
{
context.Response.ContentType = "text/plain";
return context.Response.WriteAsync("Hello World!");
});
}
}
}
此类实现与之前相同的“Hello world”示例,但它也将 Windows 身份验证设置为身份验证方案。
在 函数中 Main
,启动 OWIN 管道:
using Microsoft.Owin.Hosting;
using System;
namespace KatanaSelfHost
{
class Program
{
static void Main(string[] args)
{
using (WebApp.Start<Startup>("http://localhost:9000"))
{
Console.WriteLine("Press Enter to quit.");
Console.ReadKey();
}
}
}
}
可以在 Fiddler 中发送请求,以确认应用程序使用的是 Windows 身份验证:
HTTP/1.1 401 Unauthorized
Content-Length: 0
Server: Microsoft-HTTPAPI/2.0
WWW-Authenticate: Negotiate
WWW-Authenticate: NTLM
Date: Sun, 28 Jul 2013 21:02:21 GMT
Proxy-Support: Session-Based-Authentication
“相关主题”
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈