Activation de l’authentification Windows dans Katana

Cet article explique comment activer l’authentification Windows dans Katana. Il couvre deux scénarios : l’utilisation d’IIS pour héberger Katana et l’utilisation de HttpListener pour auto-héberger Katana dans un processus personnalisé. Merci à Barry Dorrans, David Matson et Chris Ross d’avoir examiné cet article.

Katana est l’implémentation par Microsoft d’OWIN, l’interface web ouverte pour .NET. Vous pouvez lire une introduction à OWIN et Katana ici. L’architecture OWIN comporte plusieurs couches :

  • Hôte : gère le processus dans lequel le pipeline OWIN s’exécute.
  • Serveur : ouvre un socket réseau et écoute les requêtes.
  • Middleware : traite la requête et la réponse HTTP.

Katana fournit actuellement deux serveurs, qui prennent en charge l’authentification intégrée Windows :

  • Microsoft.Owin.Host.SystemWeb. Utilise IIS avec le pipeline ASP.NET.
  • Microsoft.Owin.Host.HttpListener. Utilise System.Net.HttpListener. Ce serveur est actuellement l’option par défaut lors de l’auto-hébergement de Katana.

Notes

Katana ne fournit pas actuellement d’intergiciel OWIN pour l’authentification Windows, car cette fonctionnalité est déjà disponible sur les serveurs.

Authentification Windows dans IIS

À l’aide de Microsoft.Owin.Host.SystemWeb, vous pouvez simplement activer l’authentification Windows dans IIS.

Commençons par créer une application ASP.NET à l’aide du modèle de projet « ASP.NET Application web vide ».

Exemple d’illustration

Ensuite, ajoutez des packages NuGet. Dans le menu Outils , sélectionnez Gestionnaire de package NuGet, puis console du gestionnaire de package. Dans la fenêtre Console du Gestionnaire de package, entrez la commande suivante :

Install-Package Microsoft.Owin.Host.SystemWeb -pre

Ajoutez maintenant une classe nommée Startup avec le code suivant :

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!");
            });
        }
    }
}

C’est tout ce dont vous avez besoin pour créer une application « Hello world » pour OWIN, s’exécutant sur IIS. Appuyez sur F5 pour déboguer l'application. Vous devez voir « Hello World ! » dans la fenêtre du navigateur.

Exemple d’illustration

Ensuite, nous allons activer l’authentification Windows dans IIS Express. Dans le menu Affichage , sélectionnez Propriétés. Cliquez sur le nom du projet dans Explorateur de solutions pour afficher les propriétés du projet.

Dans la fenêtre Propriétés , définissez Authentification anonymesur Désactivé et définissez Authentification Windows sur Activé.

Activation de l’authentification, exemple d’illustration

Lorsque vous exécutez l’application à partir de Visual Studio, IIS Express nécessite les informations d’identification Windows de l’utilisateur. Vous pouvez le voir à l’aide de Fiddler ou d’un autre outil de débogage HTTP. Voici un exemple de réponse 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

Les en-têtes WWW-Authenticate dans cette réponse indiquent que le serveur prend en charge le protocole Negotiate , qui utilise Kerberos ou NTLM.

Plus tard, lorsque vous déployez l’application sur un serveur, suivez ces étapes pour activer l’authentification Windows dans IIS sur ce serveur.

Authentification Windows dans HttpListener

Si vous utilisez Microsoft.Owin.Host.HttpListener pour auto-héberger Katana, vous pouvez activer l’authentification Windows directement sur le instance HttpListener.

Tout d’abord, créez une application console. Ensuite, ajoutez des packages NuGet. Dans le menu Outils , sélectionnez Gestionnaire de package NuGet, puis console du gestionnaire de package. Dans la fenêtre Console du Gestionnaire de package, entrez la commande suivante :

Install-Package Microsoft.Owin.SelfHost -Pre

Ajoutez maintenant une classe nommée Startup avec le code suivant :

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!");
            });
        }
    }
}

Cette classe implémente le même exemple « Hello world » d’avant, mais elle définit également l’authentification Windows comme schéma d’authentification.

À l’intérieur de la Main fonction, démarrez le pipeline 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();
            }        
        }
    }
}

Vous pouvez envoyer une requête dans Fiddler pour confirmer que l’application utilise l’authentification 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

Vue d’ensemble du projet Katana

System.Net.HttpListener

Présentation de l’authentification par formulaire OWIN dans MVC 5