在ASP.NET Core中使用DirectoryServices

我正在将我的ASP.NET Core RC1应用程序升级到RC2。 我在一些* .cs文件中有一些对System.DirectoryServicesSystem.DirectoryServices.AccountManagement引用,以便我可以查询LDAP。 但我不知道如何在Project.json文件中的RC2中添加对它的引用。 我尝试的所有东西都给了我更多的错误。 任何帮助表示赞赏。

 { "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" ] } } 

目前,新的CoreCLR不支持此库。 关于此问题有一个开放的GitHub问题 ,您可以在其中找到更多信息和讨论。 (如果您只为身份validation系统使用AD,则会出现一种解决方法。)

如果您只打算在Windows服务器上运行此应用程序,则可以为框架定位“net452”并在其下添加框架程序集。

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

只是想说他们刚刚发布了Microsoft.Windows.Compatibility的预发行版,其中包含工作目录与活动目录所需的System.DirectoryServices组件……它的beta ..但它最终在那里。

https://www.nuget.org/packages/Microsoft.Windows.Compatibility/2.0.0-preview1-25914-04

添加到Bastyons上面的答案,您可以从.NET核心应用程序中安装System.DirectoryServices.AccountManagement作为NuGet包(预览版),来自https://www.nuget.org/packages/System.DirectoryServices.AccountManagement/4.5.0 -preview1-25914-04 。 安装后,您可以创建一个简单的调用来validationAD用户,如下所示:

 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; } } 

更新:此软件包现在可从https://www.nuget.org/packages/System.DirectoryServices.AccountManagement/4.5.0获得最终版本

您可以将LDAP客户端库用于.NET Standard 1.3
兼容的.NET运行时:.NET Core,.NET Framework 4.6,…
它适用于任何LDAP协议兼容的目录服务器(包括Microsoft Active Directory)。

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

有关更多信息,请阅读此问题: 支持System.DirectoryServices
这对我来说很有用。 (在.NET Core 1.1.1中)