我经常使用该net user
命令查看用户的AD组:
net user /DOMAIN <username>
Run Code Online (Sandbox Code Playgroud)
这很好用,但组名被截断为大约20个字符.在我的组织中,大多数群组名称都比这长得多.
有没有人知道通过命令行获取非截断的AD组的方法?
我有一个简单的任务,使用Java对Active Directory进行身份验证.只是验证凭据而不是其他任何内容.假设我的域名为"fun.xyz.tld",OU路径未知,用户名/密码为testu/testp.
我知道有一些Java库可以简化这项任务,但我没有成功实现它们.我发现的大多数示例都是针对LDAP的,而不是特定的Active Directory.发出LDAP请求意味着在其中发送OU路径,这是我没有的.此外,发出LDAP请求的应用程序应该已绑定到Active Directory以便访问它...不安全,因为凭据必须存储在某处可被发现的位置.如果可能的话,我希望测试绑定测试凭据 - 这意味着帐户有效.
最后,如果可能的话,有没有办法使这种认证机制加密?我知道AD使用Kerberos,但不确定Java的LDAP方法是否可以.
有没有人有一个工作代码的例子?谢谢.
我刚刚注意到结果的返回列表限制为1000.我的域(HUGE域)中有超过1000个组.如何获得超过1000条记录?我可以从以后的记录开始吗?我可以将其剪切成多次搜索吗?
这是我的查询:
DirectoryEntry dirEnt = new DirectoryEntry("LDAP://dhuba1kwtn004");
string[] loadProps = new string[] { "cn", "samaccountname", "name", "distinguishedname" };
DirectorySearcher srch = new DirectorySearcher(dirEnt, "(objectClass=Group)", loadProps);
var results = srch.FindAll();
Run Code Online (Sandbox Code Playgroud)
我试过设置srch.SizeLimit = 2000; ,但这似乎不起作用.有任何想法吗?
我正在拼凑一个快速的C#win表单应用程序,以帮助解决重复的文书工作.
我已在AD中为所有用户帐户执行搜索,并将其添加到带有复选框的列表视图中.
我想默认listviewitems的默认检查状态取决于帐户的启用/禁用状态.
string path = "LDAP://dc=example,dc=local";
DirectoryEntry directoryRoot = new DirectoryEntry(path);
DirectorySearcher searcher = new DirectorySearcher(directoryRoot,
"(&(objectClass=User)(objectCategory=Person))");
SearchResultCollection results = searcher.FindAll();
foreach (SearchResult result in results)
{
DirectoryEntry de = result.GetDirectoryEntry();
ListViewItem lvi = new ListViewItem(
(string)de.Properties["SAMAccountName"][0]);
// lvi.Checked = (bool) de.Properties["AccountEnabled"]
lvwUsers.Items.Add(lvi);
}
Run Code Online (Sandbox Code Playgroud)
我正在努力找到正确的属性进行解析以从DirectoryEntry对象获取帐户的状态.我搜索了AD用户属性,但没有找到任何有用的东西.
谁能提供任何指针?
如何使用搜索过滤器显示特定组的用户?
我尝试过以下方法:
(&
(objectCategory=user)
(memberOf=MyCustomGroup)
)
Run Code Online (Sandbox Code Playgroud)
还有这个:
(&
(objectCategory=user)
(memberOf=cn=SingleSignOn,ou=Groups,dc=tis,dc=eg,dc=ddd,D??C=com)
)
Run Code Online (Sandbox Code Playgroud)
但不显示特定组的用户.
(这是一个关于模糊问题的问题.我试图提供所有相关数据,希望有人提供有用的信息;为长篇描述道歉.)
我们的网络应用
我们有一个在IIS 7.5中运行的.NET 4 Web应用程序,可以访问Active Directory和SQL Server数据库.
此Web应用程序在一个虚拟的"应用程序池标识"运行,通过设置应用程序的应用程序池的标识ApplicationPoolIdentity.可以在StackOverflow答案和它所引用的博客文章中找到虚拟身份的简明描述:应用程序池标识只是一个附加组,它被添加到作为"网络服务"运行的Web应用程序的工作进程中.但是,一位消息人士模糊地暗示"网络服务和ApplicationPoolIdentity确实存在IIS.net站点文档不发布的差异".因此,虚拟身份可能不仅仅是一个额外的群体.
我们选择使用ApplicationPoolIdentity而不是NetworkService,因为它成为IIS 7.5中的默认设置(参见,例如,此处),并且根据Microsoft的建议:"此身份允许管理员指定仅与应用程序所属身份相关的权限池正在运行,从而提高了服务器的安全性." (来自processModel元素,用于为applicationPools添加[IIS 7设置架构])"应用程序池标识是一个强大的新隔离功能","使运行的IIS应用程序更安全可靠."(来自IIS.net文章"应用程序池标识")
该应用程序使用集成Windows身份验证,但<identity impersonate="false"/>
不是最终用户的身份,而是使用虚拟应用程序池标识来运行我们的代码.
此应用程序使用System.DirectoryServices类(即ADSI API)查询Active Directory .在大多数地方,这是在不指定其他用户名/密码或其他凭据的情况下完成的.
此应用程序还使用Integrated Security=true
连接字符串连接到SQL Server数据库.如果数据库是本地的,那么我们看到IIS APPPOOL\OurAppPoolName
用于连接数据库; 如果数据库是远程的,则使用计算机帐户OURDOMAIN\ourwebserver$
.
我们的问题
我们经常遇到以下一种方式导致工作安装失败的问题.
当数据库位于远程系统上时,数据库连接开始失败:"用户登录失败'NT AUTHORITY\ANONYMOUS LOGON'.原因:基于令牌的服务器访问验证因基础结构错误而失败.检查以前的错误." 先前的错误是"错误:18456,严重性:14,状态:11." 所以似乎现在OURDOMAIN\ourwebserver$
不再使用,而是尝试匿名访问.(我们有轶事证据表明UAC关闭时出现了这个问题,并且在打开UAC后它就消失了.但请注意,更改UAC需要重新启动......)IIS.net线程中报告了类似的问题"使用ApplicationPoolIdentity连接到SQL",特别是在一个回复中.
通过ADSI(System.DirectoryServices)的Active Directory操作开始失败,错误0x8000500C("未知错误"),0x80072020("发生操作错误.")或0x200B("指定的目录服务属性或值不存在") .
从Internet Explorer登录应用程序开始失败,出现HTTP 401错误.但是如果在IIS中我们然后在谈判之前放置NTLM然后再次工作.(请注意,Kerberos需要访问AD,但NTLM不需要访问AD.)IIS.net线程"使用AppPool标识失败的窗口身份验证"中报告了类似的问题.
我们的假设和解决方法
将应用程序池从ApplicationPoolIdentity切换到NetworkService时,至少AD和登录问题似乎总是消失.(我们发现有一份报告证实了这一点.)
页面"解决ASP页面上的身份验证问题"有一些与主要和次要令牌相关的建议,我发现它令人鼓舞的是它链接了我们的前两个错误:它提到了NT AUTHORITY\ANONYMOUS LOGON
访问,AD错误0x8000500C和"指定的目录服务属性或值不存在". …
asp.net adsi active-directory iis-7.5 applicationpoolidentity
我目前正在研究存储基于.NET的项目的用户角色和权限的方法.其中一些项目是基于网络的,有些则不是.我目前正在努力寻找最佳方法来实现我正在寻找的跨项目类型的一致,可移植的方式.
在我所处的位置,我们希望利用Active Directory作为基本用户信息的单点联系人.因此,我们希望不必为每个应用程序的用户维护自定义数据库,因为它们已存储在Active Directory中并在那里进行了主动维护.此外,我们不希望编写自己的安全模型/代码,并且希望使用预先存在的内容,例如Microsoft提供的安全应用程序块.
某些项目仅需要基本权限,例如读取,写入或无访问权限.其他项目需要更复杂的权限.这些应用程序的用户可能被授予某些区域的访问权限,但不能访问其他区域,并且他们的权限可以在每个区 应用程序的管理部分将控制和定义此访问权限,而不是 AD工具.
目前,我们正在使用集成的Windows身份验证在我们的Intranet上执行身份验证.这非常适合查找基本用户信息,我已经看到ASP.NET可以扩展为提供Active Directory角色提供程序,因此我可以找到用户所属的任何安全组.但是,对我来说,这种方法的垮台似乎是所有内容都存储在Active Directory中,如果事情变得太大,可能会导致维护混乱.
同样,我也听说过Active Directory轻量级目录服务,它似乎可以扩展我们的架构并只添加特定于应用程序的属性和组.问题是,我找不到任何关于如何做到这一点或如何工作的事情.有MSDN文章描述了如何与这个实例交谈以及如何创建一个新实例,但似乎没有什么能回答我的问题.
我的问题是:根据您的经验,我是否走上正轨?我只想使用Active Directory做什么,还是必须使用其他工具?
我研究过的其他方法:
针对Active Directory对ASP.NET MVC应用程序的用户进行身份验证的高级步骤是什么?
我推测类似的东西:
上述内容是否合理,如果是,我在哪里放置有效的用户检测逻辑?
在我的情况下,有效用户是特定AD域中的某个人.
我有一个用户'dbo'的数据库,其登录名为"domain\xzy".如何将其从"domain\xzy"更改为"domain\abc".
active-directory ×10
asp.net ×3
c# ×3
ldap ×2
security ×2
.net ×1
adsi ×1
asp.net-mvc ×1
attributes ×1
certificate ×1
cmd ×1
encryption ×1
iis-7.5 ×1
java ×1
javascript ×1
ldap-query ×1
sql-server ×1
windows ×1