.net - 当调用者不在域中时请求用户在 AD 中的角色

标签 .net security active-directory directoryservices

我想在 ActiveDirectory 中获取用户的组成员身份,但不在域中。当我在域内运行它时,一切都很好。

var context = new PrincipalContext(ContextType.Domain);
var principal = UserPrincipal.FindByIdentity(context, IdentityType.Name, "administrator");

foreach (var authorizationGroup in principal.GetAuthorizationGroups())
{
    Console.WriteLine(authorizationGroup.Name);
}

但是,当我在域外运行时,我必须指定PrincipalContext:

var context = new PrincipalContext(ContextType.Domain, "10.0.1.255", "DC=test,DC=ad,DC=be", "administrator", "password");

当我运行此代码时,在执行 principal.GetAuthorizationGroups() 时出现异常。我得到的异常(exception)是:

System.DirectoryServices.AccountManagement.PrincipalOperationException: Information about the domain could not be retrieved (1355).
at System.DirectoryServices.AccountManagement.Utils.GetDcName(String computerName, String domainName, String siteName, Int32 flags)
at System.DirectoryServices.AccountManagement.ADStoreCtx.LoadDomainInfo()
at System.DirectoryServices.AccountManagement.ADStoreCtx.get_DnsDomainName()
at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOfAZ(Principal p)
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroupsHelper()
at System.DirectoryServices.AccountManagement.UserPrincipal.GetAuthorizationGroups()

最佳答案

看起来像是 DNS 问题。

DC 定位器的工作原理是对 SRV 记录进行 DNS 查询,以在当前站点中查找适当的 DC。如果这些内容不在 DNS 中,DC 定位器将会失败,这会在您的堆栈跟踪中发生。

关于.net - 当调用者不在域中时请求用户在 AD 中的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/511396/

相关文章:

.net - 将 NLog 与多个应用程序实例一起使用

.net - 将.NET 4.0 dll安装到GAC

linux - Apache 领域安全吗?

java - 以编程方式加载 Java cacert 时出现授权错误

php - 如何使用来自受信任域的凭据绑定(bind)到 PHP 中的 AD 服务器?

.net - Windows 7 Websocket PlatformNotSupportedException

.net - 如何使用 DevCenter 远程连接到 Cassandra

ajax - 什么使 cffunction 中的 verifyClient 安全?

powershell - Azure Active Directory 应用程序和服务主体

c# - 具有使用 SSL 的上下文的 UserPrincipal