我正在尝试跨域进行单向目录同步(没有信任)。理想情况下,我想使用现有的同步框架,如Microsoft Sync Framework 2.1,但无法弄清楚如何正确设置身份验证。我想我需要使用NTLM传递身份验证(描述here),但初始测试没有显示成功。
我正在处理的代码与此类似(基于MSDN示例):
SafeTokenHandle safeTokenHandle;
bool returnValue = LogonUser("xfrtest", ".", "password", 8, 2, out safeTokenHandle);
using (WindowsIdentity newId = new WindowsIdentity(safeTokenHandle.DangerousGetHandle()))
{
using (WindowsImpersonationContext ctx = newId.Impersonate())
{
sourceProvider = new FileSyncProvider(
sourceReplicaRootPath, filter, options);
destinationProvider = new FileSyncProvider(
destinationReplicaRootPath, filter, options);
SyncOrchestrator agent = new SyncOrchestrator();
agent.LocalProvider = sourceProvider;
agent.RemoteProvider = destinationProvider;
agent.Direction = SyncDirectionOrder.Upload;
sourceProvider.DetectChanges();
destinationProvider.DetectChanges();
var results = agent.Synchronize();
}
}
我在两台机器上使用相同的密码在本地设置了“xfrtest”帐户。登录适用于源系统(我也在运行代码)但在目标上失败。
所以问题是......首先,是否可以使用Sync Framework执行此操作?如果是这样,我是否接近传递错误?如果没有,有什么好的替代方案的建议吗?
答案 0 :(得分:0)
事实证明,这段代码确实可行。我的问题是我正在测试的非生产域具有信任,这导致Windows不会回退到NTLM传递身份验证。当我设置没有信任域或非域机器的域时,这可行。