根据我的经验,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