一段时间以来,我一直在寻找解决方案,但不幸的是,每个线程都是死胡同。
我正在开发一个仅由我们公司内部使用的 C#/ASP.net Web 应用程序。在 IIS 和我的 web.config 文件中,匿名访问已被关闭,强制 IIS 使用 Windows 身份验证用户(Active Dir 用户)。
我的问题是以下代码可以完美地获得所需的(或任何)AD 用户:
using System.DirectoryServices.AccountManagement;
... other code ...
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain", "someADuser", "someADuserpassword");
UserPrincipal winuser = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "samaccountname");
上面 PrincipalContext 中使用的“someADuser”是当前通过 windows 登录的用户,因此经过身份验证,是一个有效的 AD 用户。使用以下代码(完全相同的用户仍然登录)给我一个“登录失败:未知用户名或密码错误”错误:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain");
UserPrincipal winuser = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "samaccountname");
如果未在 PrincipalContext 对象中指定,则 UserPrincipal.FindByIdentity 似乎出于某种原因不使用已登录用户的验证凭据 - 这是我不想做的事情。
即使必要的设置(我希望)添加到 web.config 中,ctx 是否有可能由于某种原因没有获取登录的 Windows 用户:
<authentication mode="Windows"/>
<authorization>
<deny users="?"/>
</authorization>
并且在 IIS 中完全禁用了匿名访问?