3

我正在开发一个网站,它将对用户进行身份验证并用新密码更改旧密码。

我正在使用 WinNT 字符串连接和设置密码,没有旧密码检查,工作正常。

我的代码如下:

'actual setting password
            Dim entryD As New DirectoryEntry("WinNT://" + Environment.MachineName + ",computer")

            Dim NewUser As DirectoryEntry = entryD.Children.Find(username, "user")


            Dim nativeobject As Object = NewUser.NativeObject
            NewUser.Invoke("SetPassword", New Object() {strPassNew})

            NewUser.CommitChanges()
            'setting password ends

这工作正常,但身份验证代码不起作用。

如下:

'authentication starts
            Dim adsiPath As String

            adsiPath = String.Format("WinNT://{0}/{1},user", domain, username)

            Dim userEntry = New DirectoryEntry(adsiPath, username, password, AuthenticationTypes.Secure)

            'Dim nativeobject1 As Object = userEntry.NativeObject

            Dim newobj As ActiveDs.IADsUser = userEntry.NativeObject


            authent = True

            'authentication ends

这会进行身份验证,但它抛出的异常是:

logon failure: unknown username or bad password

第一次,但如果我再做一次,错误是:

“不允许同一用户使用多个用户名多次连接到服务器或共享资源。断开与服务器或共享资源的所有先前连接,然后重试。”

我不想发生这种情况......我不想使用 LDAP,我想要一个解决方案来验证旧密码。请帮忙?

4

1 回答 1

0

我的代码中有此错误,要求将域用户添加到系统的本地管理员组。在第一次尝试后测试代码时,我曾经得到“与服务器的多个连接......”错误,然后我如果稍后(一个小时左右)尝试代码代码,它工作正常。通过各种形式搜索后,我知道我们可以看到用户使用登录到计算机

NET SESSION /LIST

远程系统的 cmd 中的命令,似乎当我们使用 WinNT 提供程序时,它实际上会在远程计算机上创建一个空闲超时的用户会话(可能存在其他程序正在创建会话的情况),这会在您第二次尝试时与连接发生冲突. 所以我尝试删除上一个会话

NET SESSION \\RequestingComputerName /DELETE

然后我没有得到错误。如果这不能解决问题,那么最后的手段是重新启动系统。

于 2015-12-02T10:03:38.020 回答