突然收到 LDAP 推荐
Suddenly getting LDAP Referrals
我有两个域,一个是生产域,一个是开发域。我的开发域突然开始出现错误 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'
快速 google 显示给 运行 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;
我有两个域,一个是生产域,一个是开发域。我的开发域突然开始出现错误 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'
快速 google 显示给 运行 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;