1

如标题所示,我正在尝试将 DirectoryEntry 参数转换为 PrincipalContext,但在 DirectionEntry 中没有看到等效于 AuthenticationTypes.Secure 的 ContextOption。

AuthenticationTypes.Secure:http://msdn.microsoft.com/en-us/library/system.directoryservices.authenticationtypes.aspx _

请求安全身份验证。设置此标志时,WinNT 提供程序使用 NTLM 对客户端进行身份验证。Active Directory 域服务使用 Kerberos,可能还有 NTLM,对客户端进行身份验证。当用户名和密码是空引用(在 Visual Basic 中为 Nothing)时,ADSI 使用调用线程的安全上下文绑定到对象,该安全上下文是运行应用程序的用户帐户的安全上下文,或者是调用线程正在模拟的客户端用户帐户。

上下文选项:http : //msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement.contextoptions.aspx

我没有看到类似的东西......

4

1 回答 1

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
于 2013-07-03T16:17:40.880 回答