【问题标题】:ASP.NET change AD passwordASP.NET 更改 AD 密码
【发布时间】:2014-05-12 01:23:27
【问题描述】:

我知道这很丑陋,我知道我应该将它放在我一直在修补试图让它工作的 try 块中。我在这里遗漏了一些东西,我非常感谢一些帮助解决它。我要做的就是创建一个页面,其中包含一个用于登录名的文本框以及一个用于旧密码和两个用于新密码的文本框。要添加更多信息,我现在得到的错误是 未知名称。 (来自 HRESULT 的异常:0x80020006 (DISP_E_UNKNOWNNAME)) 当我尝试调用 ChangePassword 时

     Dim userid As String
    Dim password As String
    Dim login As String
    Dim check As String
    login = txtLogin.Text
    userid = txtLogin.Text
    password = txtOldPass.Text
    Dim entry As DirectoryEntry = New DirectoryEntry("LDAP://OU=PaidUsers,DC=LOCAL,DC=bb", "LOCAL\" & userid, password)

    Dim obj As Object = entry.NativeObject
    Dim search As DirectorySearcher = New DirectorySearcher(entry)
    search.SearchScope = SearchScope.Subtree
    search.Filter = "(SAMAccountName=" & login & ")"
    Dim result As SearchResult = search.FindOne()

    check = CType(result.Properties("sAMAccountName")(0), String)

    If check = login Then
        If txtNewPass.Text = txtNewPass2.Text Then
            entry = result.GetDirectoryEntry()
            entry.Username = "LOCAL\" & check
            entry.Password = txtOldPass.Text
            entry.AuthenticationType = AuthenticationTypes.Secure
            entry.Options.Referral = ReferralChasingOption.All
            entry.Invoke("ChangePassword", txtOldPass.Text, txtNewPass.Text)
            entry.CommitChanges()
            lblSuccess.Visible = True

        Else
            lblPasswdError.Visible = True
        End If

    Else
        lblError.Visible = True
    End If

【问题讨论】:

  • 我最终能够通过结合来自一堆不同项目的解决方案来解决这个问题,这段代码可以工作,但我仍然知道并相信它需要进行大量清理。我只是认为这可以帮助正在解决同样问题的其他人。解决方案代码已经改成上面的代码了。
  • 鼓励自行回答问题!随时发表您的评论作为答案。

标签: asp.net vb.net active-directory


【解决方案1】:

修复它的错误是在调用“ChangePassword”之前获取目录条目的命令。我没有意识到的是,一旦我进入 IF 逻辑,条目目录条目就没有我试图更改的帐户,因此出现 UnknownName 错误。调用我对 LDAP 的初始查询的结果找到了用户帐户,它就像一个魅力。工作代码如下;

    lblError.Visible = False
    lblSuccess.Visible = False
    lblPasswdError.Visible = False
    lblCatch.Visible = False
    Dim userid As String
    Dim password As String
    Dim check As String
    userid = txtLogin.Text
    password = txtOldPass.Text
    Dim entry As DirectoryEntry = New DirectoryEntry("LDAP://OU=PaidUsers,DC=LOCAL,DC=bb", "LOCAL\" & userid, password)

    Try

        Dim search As DirectorySearcher = New DirectorySearcher(entry)
        search.SearchScope = SearchScope.Subtree
        search.Filter = "(SAMAccountName=" & userid & ")"
        Dim result As SearchResult = search.FindOne()

        check = CType(result.Properties("sAMAccountName")(0), String)
        If check <> Nothing Then

            If check = userid Then
                If txtNewPass.Text = txtNewPass2.Text Then
                    entry = result.GetDirectoryEntry()
                    entry.Username = "LOCAL\" & check
                    entry.Password = txtOldPass.Text
                    entry.AuthenticationType = AuthenticationTypes.Secure
                    entry.Options.Referral = ReferralChasingOption.All
                    entry.Invoke("ChangePassword", txtOldPass.Text, txtNewPass.Text)
                    entry.CommitChanges()
                    lblSuccess.Visible = True

                Else
                    lblPasswdError.Visible = True
                End If

            Else
                lblError.Visible = True
            End If
        Else
            lblError.Visible = True
        End If
    Catch ex As Exception
        lblCatch.Text = "Error message: " + ex.InnerException.Message
        lblCatch.Visible = True
    End Try

【讨论】:

    猜你喜欢
    • 2015-09-09
    • 1970-01-01
    • 2018-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    • 2015-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多