Katana で Windows 認証を有効にする
この記事では、Katana で Windows 認証を有効にする方法について説明します。 ここでは、IIS を使用して Katana をホストし、HttpListener を使用してカスタム プロセスで Katana をセルフホストする 2 つのシナリオについて説明します。 この記事をレビューしてくれた Barry Dorrans、David Matson、Chris Ross に感謝します。
Katana は、.NET 用の Open Web インターフェイスである OWIN の Microsoft の実装です。 OWIN と Katana の概要 については、こちらを参照してください。 OWIN アーキテクチャには、いくつかのレイヤーがあります。
- ホスト: OWIN パイプラインを実行するプロセスを管理します。
- サーバー: ネットワーク ソケットを開き、要求をリッスンします。
- ミドルウェア: HTTP 要求と応答を処理します。
Katana は現在、Windows 統合認証をサポートする 2 つのサーバーを提供しています。
- Microsoft.Owin.Host.SystemWeb。 ASP.NET パイプラインで IIS を使用します。
- Microsoft.Owin.Host.HttpListener。 System.Net.HttpListener を使用します。 現在、このサーバーは Katana をセルフホスティングする場合の既定のオプションです。
Note
現在、Katana は Windows 認証用の OWIN ミドルウェアを提供していません。この機能はサーバーで既に使用できるためです。
IIS での Windows 認証
Microsoft.Owin.Host.SystemWeb を使用すると、IIS で Windows 認証を有効にすることができます。
まず、"空の Web アプリケーションの ASP.NET" プロジェクト テンプレートを使用して、新しい ASP.NET アプリケーションを作成します。
次に、NuGet パッケージを追加します。 [ツール] メニューの [NuGet パッケージ マネージャー] を選択し、[パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。
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 パッケージ マネージャー] を選択し、[パッケージ マネージャー コンソール] を選択します。 [パッケージ マネージャー コンソール] ウィンドウで、次のコマンドを入力します。
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 の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示