正如标题所述,我正在尝试将DirectoryEntry参数转换为PrincipalContext,但我没有看到ContextEption等同于DirectionEntry中的AuthenticationTypes.Secure。
AuthenticationTypes.Secure:http://msdn.microsoft.com/en-us/library/system.directoryservices.authenticationtypes.aspx
请求安全身份验证。设置此标志时,WinNT provider使用NTLM来验证客户端。 Active Directory域 服务使用Kerberos(可能还有NTLM)来验证客户端。 当用户名和密码是空引用时(Nothing in。) Visual Basic),ADSI使用安全上下文绑定到对象 调用线程,它是用户的安全上下文 运行应用程序的帐户或客户端用户的帐户 调用线程模仿的帐户。
ContextOption:http://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.contextoptions.aspx
我没有看到类似的东西......
答案 0 :(得分:3)
根据我的经验,ContextOptions.Negotiate
相当于AuthenticationTypes.Secure
。
另请参阅MSDN上有关这两个值的说明。
ContextOptions.Negotiate - 使用Kerberos或NTLM对客户端进行身份验证。如果未提供用户名和密码,则Account Management API将使用调用线程的安全上下文绑定到对象,该安全上下文是运行应用程序的用户帐户的安全上下文或客户端用户帐户的安全上下文调用线程代表。
AuthenticationTypes.Secure - 请求安全身份验证。设置此标志后,WinNT提供程序使用NTLM对客户端进行身份验证。 Active Directory域服务使用Kerberos(可能还有NTLM)对客户端进行身份验证。
您可以使用以下代码对此进行测试:
PrincipalContext ctx = new PrincipalContext(ContextType.Domain,
"test.int",
"CN=Users,DC=test,DC=int",
ContextOptions.Negotiate,
"administrator",
"SecurePassword");
UserPrincipal usr = new UserPrincipal(ctx);
usr.Name = "Jim Daly";
usr.SamAccountName = "Jim.Daly";
usr.UserPrincipalName = "Jim.Daly@test.int";
usr.Description = "This is the user account for Jim Daly";
usr.EmailAddress = "jimdaly@test.int";
usr.SetPassword("VerySecurePwd");
usr.Save();
// Get the underlying directory entry.
DirectoryEntry de = (DirectoryEntry)usr.GetUnderlyingObject();
// Print the authentication type
Console.Out.WriteLine(de.AuthenticationType);
我认为其他选项映射如下:
ContextOptions.Sealing -> AuthenticationTypes.Sealing
ContextOptions.SecureSocketLayer -> AuthenticationTypes.Encryption
ContextOptions.ServerBind -> AuthenticationTypes.ServerBind
ContextOptions.Signing -> AuthenticationTypes.Signing
ContextOptions.SimpleBind -> AuthenticationTypes.None