web-dev-qa-db-fra.com

Utilisation de DirectoryServices dans ASP.NET Core

Je mets à niveau mon application ASP.NET Core RC1 vers RC2. J'ai quelques références à System.DirectoryServices et System.DirectoryServices.AccountManagement dans certains fichiers * .cs pour que je puisse interroger LDAP. Mais je ne sais pas comment y ajouter des références dans RC2 dans le Project.json fichier. Tout ce que j'essaie me donne plus d'erreurs. Toute aide est appréciée.

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0-rc2-3002702",
      "type": "default"
    },
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview1-final",
    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview1-final",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Newtonsoft.Json": "8.0.3",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc2-final",
    "System.Linq": "4.0.1-beta-23516",
    "System.Linq.Queryable": "4.0.1-beta-23516"
  },

  "tools": {
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    },
    "Microsoft.Extensions.SecretManager.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    },
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview1-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "dnxcore50",
        "portable-net45+win8"
      ]
    }
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
  }
}
10
BinaryNexus

Le nouveau CoreCLR ne prend pas en charge cette bibliothèque pour le moment. Il y a un problème GitHub ouvert à ce sujet, où vous pouvez trouver plus d'informations et de discussions. (Une solution de contournement y est présentée si vous utilisez uniquement AD pour votre système d'authentification.)

Si vous prévoyez uniquement d'exécuter cette application sur un serveur Windows, vous pouvez cibler "net452" pour le cadre et ajouter les assemblys du cadre en dessous.

"frameworks": {
  "net452": {
    "frameworkAssemblies": {
      "System.DirectoryServices": "4.0.0.0",
      "System.DirectoryServices.AccountManagement": "4.0.0.0"
    }
  }
},
4
Will Ray

Je veux juste dire qu'ils viennent de publier une pré-version du Microsoft.Windows.Compatibility qui contient le System.DirectoryServices composants nécessaires pour travailler avec Active Directory ... sa version bêta, mais enfin disponible.

13
Bastyon

En ajoutant à la réponse Bastyons ci-dessus, vous pouvez installer System.DirectoryServices.AccountManagement dans une application .NET Core en tant que package NuGet (version d'aperçu) à partir de https://www.nuget.org/packages/System.DirectoryServices.AccountManagement/4.5.0-preview1-25914-04 =. Une fois installé, vous pouvez créer un simple appel pour authentifier un utilisateur AD comme suit:

public static bool ValidateCredentials(string userName, string password)
{
    try 
    {
        using (var adContext = new PrincipalContext(ContextType.Domain, "YOUR_AD_DOMAIN"))
        {
            return adContext.ValidateCredentials(userName, password);
        }
    }
    catch(Exception ex) 
    {
        throw ex;
    }
}

Mise à jour: ce package est désormais disponible en tant que version finale à partir de https://www.nuget.org/packages/System.DirectoryServices.AccountManagement/4.5.

11
zdub

Vous pouvez utiliser bibliothèque cliente LDAP pour .NET Standard 1.
Runtimes .NET compatibles: .NET Core, .NET Framework 4.6, ...
Il fonctionne avec tout serveur d'annuaire compatible avec le protocole LDAP (y compris Microsoft Active Directory).

private static bool LoginLdap(string username, string password)
{
    try
    {
        using (var conn = new LdapConnection())
        {
            conn.Connect("<LdapHost>", 389);
            conn.Bind(LdapConnection.Ldap_V3, $"<yourDomain>\\{username}", password);
        }
        return true;
    }
    catch (LdapException)
    {
        return false;
    }            
}

Pour plus d'informations, lisez ce numéro: Support for System.DirectoryServices
Cela fonctionne bien pour moi. (dans .NET Core 1.1.1)

4
Soren