3

ユーザーを認証し、古いパスワードを新しいパスワードに変更する Web サイトを開発しています。

私は 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

システムのローカル管理者グループにドメイン ユーザーを追加する必要があるコードで、このエラーが発生しました。最初の試行後にコードをテストしているときに、「サーバーへの複数の接続...」エラーが発生し、後でコード コードを試行すると (1 時間ほど) 正常に機能しました。さまざまなフォームを検索した後、次を使用してコンピューターにログオンしているユーザーを確認できることがわかりました

NET SESSION /LIST

コマンドをリモート システムの cmd で実行すると、WinNT プロバイダーを使用すると、実際にはリモート コンピューターでアイドル タイムアウトを伴うユーザー セッションが作成されるように見えます (他のプログラムがセッションを作成している状況が発生する可能性があります)。 . だから私は前のセッションを削除しようとしました

NET SESSION \\RequestingComputerName /DELETE

その後、エラーは発生しませんでした。それでも問題が解決しない場合、最後の手段はシステムを再起動することです。

于 2015-12-02T10:03:38.020 に答える