我有两个领域,一个是生产领域,另一个是开发领域。我的开发域突然开始给出错误DirectoryServicesCOMException: A referral was returned from the server.
这种情况今天才开始发生。我昨天确认它有效。域控制器或我的应用程序未发现任何更改。
当我的开发服务器对生产用户配置文件执行LDAP搜索时。我正在使用一些相当标准的LDAP查询代码:
private IUserDetails queryUserBySID(string sid)
{
DirectoryEntry de = new DirectoryEntry(domainLdap); // "DC=production,DC=local"
var ds = new DirectorySearcher(de);
ds.Filter = $"(&(objectCategory=User)(objectClass=person)(objectSid={sid}))";
var result = ds.FindOne(); // <-- referral error
//...
}
然而,这是有效的(即使在使用IIS AppPool凭据时(:
PS C:> Get-ADUser -Server productiondc -Identity testuser
我验证了两个域相互信任。我的任何一个域可能发生了什么变化导致了这种情况?
编辑1
这个问题解决了1-2天,然后又出现了。
检查ExtendedErrorMessage
给出
0000202B: RefErr: DSID-03100835, data 0, 1 access points
ref 1: 'production.local'
快速谷歌显示运行dcdiag
编辑2
我认为这是dcdiag
:的一个相关错误
An error event occurred. EventID: 0xC0000010
Time Generated: 02/22/2022 22:22:22
Event String:
While processing a TGS request for the target server <user>/SERVER, the account DevMachine$@DEVELOPMENT.LOCAL did not have a suitable key for generating a Kerberos ticket (the missing key has an ID of 8). The requested etypes were 18 17. The accounts available etypes were 18 17 23 -133 -128 24 -135. Changing or resetting the password of PRODUCTION.LOCAL will generate a proper key.
推荐意味着"我没有你想要的信息,但我知道你在哪里可以得到;所以你连接的服务器和数据所在的位置不匹配。我不能告诉你发生了什么变化,但我可以告诉你如何获得更多信息。
抛出异常后,调用de.Options.GetCurrentServerName()
查看在哪个服务器上执行了搜索
然后检查异常的ExtendedErrorMessage
属性,看看它是否告诉您它指的是哪个服务器
要绕过异常并自动跟踪引用,可以使用DirectorySearcher
:的ReferralChasing
属性
ds.ReferralChasing = ReferralChasingOption.All;