Tag: active directory

在ASP.NET webapp中,FindByIdentity因PricipalOperationException而失败

我正在努力解决在我的内部Web应用程序中使用System.DirectoryServices.AccountManagement的问题。 错误不是很具描述性,但是这里发生了什么: 当我尝试validationAD中是否存在提供的用户ID时,我使用以下代码: private bool IsWindowsIDValid(string strWindowsID) { var context = new PrincipalContext(ContextType.Domain, “DOMAINSERVER”, “DC=DOMAINNAME,DC=net”); var userPrincipal = UserPrincipal.FindByIdentity(context, strWindowsID); return (userPrincipal != null); } 但是,在调用FindByIdentity的第二行抛出exception。 以下是exception详细信息: 消息:“发生了操作错误。” 堆栈跟踪: System.DirectoryServices.AccountManagement.PrincipalContext.DoLDAPDirectoryInit()at System.DirectoryServices.AccountManagement.PrincipalContext.DoDomainInit()at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()at System.DirectoryServices.AccountManagement.PrincipalContext.get_QueryCtx()at System System.DirectoryServices上的System.DirectoryServices.AccountManagement.Principal.FindByIdentityWithType(PrincipalContext context,Type principalType,String identityValue)中的.DirectoryServices.AccountManagement.Principal.FindBdentIdentityWithTypeHelper(PrincipalContext context,Type principalType,Nullable`1 identityType,String identityValue,DateTime refDate) .AccountManagement.UserPrincipal.FindByIdentity(PrincipalContext context,String identityValue)at *****。IsWindowsIDValid(String strWindowsID)in *****。ascx.cs:line 193 如果我尝试检查PrincipalContext的ConnectedServer属性,也会发生同样的错误。 但是,我可以尝试根据上下文validation凭据(使用context.ValidateCredentials()),它将通过正常。 关于可能发生的事情的任何想法? 我可以在我的机器上的独立控制台脚本中运行此代码 – […]

模拟DirectoryEntry的“属性”属性

我正在尝试对一些Active Directory代码进行unit testing,与此问题中概述的完全相同: 创建DirectoryEntry实例以用于测试 接受的答案建议为DirectoryEntry类实现一个包装器/适配器,我有: public interface IDirectoryEntry : IDisposable { PropertyCollection Properties { get; } } public class DirectoryEntryWrapper : DirectoryEntry, IDirectoryEntry { } 问题是我的IDirectoryEntry mock上的“ Properties ”属性未初始化。 试图像这样设置模拟: this._directoryEntryMock = new Mock(); this._directoryEntryMock.Setup(m => m.Properties) .Returns(new PropertyCollection()); 导致以下错误: 类型’System.DirectoryServices.PropertyCollection’没有定义构造函数 据我所知,当尝试仅使用内部构造函数实例化一个类时,会抛出此错误: 类型’…’没有定义构造函数 我试图为PropertyCollection类编写一个包装器/适配器但是没有公共构造函数我无法弄清楚如何从类中实例化或inheritance。 那么我如何在DirectoryEntry类上模拟/设置“ Properties ”属性以进行测试呢?

UserPrincipals.GetAuthorizationGroups枚举组时发生错误(1301)。 该组的SID无法解决

背景: 我一直在使用UserPrincipal.GetAuthorizationGroups一段时间来检查2个不同应用程序的权限。 他们已经好几年了。 最近一些用户已经收到标题中提到的错误( System.DirectoryServices.AccountManagement.PrincipalOperationException ),而其他用户则没有。 我怀疑它可能与在Windows Server 2012上运行的新域控制器有关,因为问题在添加后的第二天就开始了。 完整错误如下: 例外: System.DirectoryServices.AccountManagement.PrincipalOperationException:枚举组时发生错误(1301)。 该组的SID无法解决。 在System.DirectoryServices.AccountManagement.SidList.TranslateSids(String target,IntPtr [] pSids)at System.DirectoryServices.AccountManagement.SidList..ctor(SID_AND_ATTR [] sidAndAttr) at System.DirectoryServices.AccountManagement.AuthZSet..ctor(Byte [] userSid,NetCred credentials,ContextOptions contextOptions,String flatUserAuthority,StoreCtx userStoreCtx,Object userCtxBase) 在System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ … p) 在System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups 题: 我该如何解决?

从Active Directory PrincipalContext获取所有用户

我使用以下代码来访问我的AD中的用户列表,但是在我将用户添加到combobox的行中,我得到一个空引用exception。 PrincipalContext AD = new PrincipalContext(ContextType.Domain, “mydomainip”); UserPrincipal u = new UserPrincipal(AD); PrincipalSearcher search = new PrincipalSearcher(u); foreach (UserPrincipal result in search.FindAll()) { if (result.DisplayName != null) { comboBox2.Items.Add(result.DisplayName); } } 知道我做错了什么吗? 我用Console.WriteLine(result.DisplayName)替换了combobox,它工作正常。

ASP.NET – 获取DirectoryEntry / SID的主体/相对标识符(RID)

我在自定义MembershipProvider类中使用Active Directory来validationASP.NET 2.0 Intranet应用程序中的用户,并将其sid与应用程序的配置文件相关联。 使用ActiveDirectoryMembershipProvider , MembershipUser的ProviderUserKey对象如下所示 SecurityIdentifier sid = (SecurityIdentifier)Membership.GetUser().ProviderUserKey; string sidValue = sid.ToString(); /* sidValue = “S-1-5-21-XXXX-XXXX-XXXX-YY” */ 据我了解, YY是命名空间中的主体(也称为组/域)。 使用自定义MembershipProvider时,我可以使用DirectoryEntry对象的objectSid属性获取sid DirectoryEntry entry = new DirectoryEntry(path, username, password); SecurityIdentifier sid = new SecurityIdentifier((byte[])entry.Properties[“objectSid”].Value, 0); string sidValue = sid.ToString(); /* sidValue = “S-1-5-21-XXXX-XXXX-XXXX” */ 在这种情况下, sidValue是相同的,除了它不包含主YY 。 我的问题是双重的 是否需要本人才能唯一地识别个人? 是否可以从DirectoryEntry对象(或通过System.DirectoryServices可用的任何其他类)获取主体? 编辑: 做了一些进一步的阅读( {1} {2} […]

在ASP.NET Core中使用DirectoryServices

我正在将我的ASP.NET Core RC1应用程序升级到RC2。 我在一些* .cs文件中有一些对System.DirectoryServices和System.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”, […]

根据Active Directory策略检查密码

我有一个前端,允许用户更改它的AD密码。 有没有办法获得特定用户的密码策略(例如细粒度)及其属性(长度,复杂性……) 有没有办法检查字符串“xyz121”针对此特定政策? 编辑:我不想检查存储在活动目录中的当前密码。 我想检查新密码是否可以安全进入活动目录。 例如:用户在他的新密码“xyz121”中键入并想要更改它,但是活动目录只允许密码至少有8个字符。

查找组名称所在的Active Directory组

我需要编写一个C#脚本,它返回所有具有以某个名称开头的组名的Active Directory组。 我知道可以使用以下代码返回一个组。 PrincipalContext ctx = new PrincipalContext(ContextType.Domain); GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, “Groupname”); 但是,我想要Groupname所在的所有组,例如“GroupPrefix”。 然后我想使用以下代码遍历所有这些组,并将“成员”存储在我稍后可以用于搜索的数组/列表中。 foreach (UserPrincipal p in grp.GetMembers(true)) 我非常感谢能得到的任何帮助。

针对活动目录中的用户进行身份validation?

我有一个Web应用程序,我有一个登录页面。如何对活动目录用户进行身份validation? 到目前为止,我能够从活动目录中获取一些属性,最后我能够使用LDAP字符串与AD进行通信。我知道无法从AD中提取密码并根据用户输入的密码进行身份validation!! 有没有办法可以对活动目录用户进行身份validation? 到目前为止,这是我的代码 public class Userdetails { public static string ADPath = ConfigurationManager.AppSettings.Get(“ADPath”); // Get the ADAM Path from web config fiel public static string ADUser = ConfigurationManager.AppSettings.Get(“ADUser”); //ADAM Administrator public static string ADPassword = ConfigurationManager.AppSettings.Get(“ADPassword”); //ADAM Administrator password public static DirectoryEntry GetUserDetails(string userID) { AuthenticationTypes AuthTypes; // Authentication flags. // Set authentication flags. […]

如何在c#中从SmartCard读取凭据

在我的组织中,用户必须使用SmartCard进行交互式登录Windows工作站(95,Vista和7)。 几乎每天,我们都需要读取存储在SmartCard中的凭据,并将它们与ActiveDirectory进行比较,而无需实现自定义凭证管理器。 我们比较的字段是:userPrincialName和sAMAccountName。 你能告诉我一个代码,演示如何从智能卡读取凭据或引导我访问互联网上的文章/代码吗? 对互联网的搜索建议实施凭证管理器或使用其他语言(如C,C ++)。 另外,我遇​​到了这篇文章: http : //www.codeproject.com/Articles/17013/Smart-Card-Framework-for-NET由orouit编写,这是一个使用智能卡的框架 – 但我认为这太多了为了我的简单任务。 你怎么看?