0

LDAP と AD について、基本的な機能 (この場合は Microsoft) 以外はほとんど何も知らないにもかかわらず、ユーザーの電子メール アドレスを取得するようにプログラムを変更するように依頼されました。LDAP を使用するようにアプリケーションを構成できます。それがどのように使用されているのか正確にはわかりません-アプリケーションのパスワードをユーザーの LDAP パスワードと同期させることと関係があります。アプリケーションにはパスワードがありますが、これはユーザーの LDAP パスワードとは異なる場合があります。パスワードを同期するメカニズムがいくつかありますが、理論上は気にする必要はありませんが、機能すると言われています。

もちろん、試してみるための LDAP サーバーはここにはありませんでした。

そのため、私は Windows 2003 サーバーを PC にインストールし、LDAP を有効にしました (膨大な学習曲線です)。数人のユーザーを追加しました。そしてそのうちの 1 つを Domain Admin のメンバーにすることさえできました。

私が取り組んでいるアプリケーションには、LDAP への接続を構成するセットアップ機能があります。これには便利なテスト設定ボタンがあります。サーバーの IP アドレスとポート番号を入力して [設定のテスト] を押すと、テストが成功したことがわかります。うーん - それはありそうもないようです。それが求める他の情報があります:

  • サービス アカウント DN
  • サービス アカウントのパスワード
  • ユーザー アカウント コンテナー。

これらを空白のままにして設定を保存すると、アプリケーションを起動して、ユーザー名のみをパスワード付きまたはパスワードなしで入力できるようになります。もちろん、これは正しくありません。アプリを起動できないはずです。したがって、これら 3 つの情報を設定する必要があるとしか考えられません。

私が作成した LDAP サーバーの名前は、Aware.Server

そのDC=AWare, DC=Serverため、サービス アカウント DN (ここでは推測であり、そこに何があるべきかcn=Users, DC=AWare.Serverはよくわかりません) とユーザー アカウント コンテナー (繰り返しますが、それが何であるか、または何を意味するのかはよくわかりません) に入れました。そこにいる)。

サービス アカウントのパスワードがわからないので、空白のままにします。

Test Settings を押すと、ユーザー名とパスワードの入力を求められます。

それらを空白のままにすると、テストが成功したと表示されます。私は心配し始めています。

LDAP に入力したユーザー名とパスワードを入力すると、テストが成功したと表示されます。

実際、それらのボックスに何かを入れると、それは成功したと言えます。

ただし、サービス アカウントのパスワードに何かを入力すると、テストは成功しません。指定されたサービス アカウントのユーザー名またはパスワードが無効であると表示されます。

この時点での主な質問は、サービス アカウントのパスワードを確認するにはどうすればよいかということです。

そして、私が期待している行動はありますか?ありがとうスティーブ

サインオンを検証するためのコードは次のとおりです。

Public Shared Function ValidateUser(ByVal server As String, ByVal port As Integer, ByVal userBase As String, ByVal userName As String, ByVal password As String, ByVal bindUser As String, ByVal bindPassword As String) As LdapValidatorResult
            Dim retVal As New LdapValidatorResult
            Dim conn As New Novell.Directory.Ldap.LdapConnection()
            Try

                'connect to the specificed server for user validation
                conn.Connect(server, port)

                retVal.Result = LdapValidatorResultType.Success
                Try
                    'now authenticate to we can then go on to see if the username specificed exists
                    conn.Bind(bindUser, bindPassword)

                    'construct the distinguished name to uniquely id the specified user
                    Dim searchString As String = String.Format("CN={0},{1}", userName, userBase)

                    'look to see if the user attempting to login to a-ware exists
                    Dim sResults As LdapSearchResults = conn.Search(searchString, Novell.Directory.Ldap.LdapConnection.SCOPE_SUB, Nothing, Nothing, False) '"(&(!(objectClass=computer)))"
                    If sResults.hasMore Then

                        Try

                            'now validate the user with the password as the final check
                            Dim userDN As String = sResults.next.DN
                            conn.Bind(userDN, password)
                            retVal.Result = LdapValidatorResultType.Success

                        Catch ex As Novell.Directory.Ldap.LdapException
                            If ex.ResultCode = Novell.Directory.Ldap.LdapException.INVALID_CREDENTIALS Then
                                retVal.Result = LdapValidatorResultType.InvalidUserNameOrPassword
                            End If
                            retVal.ExceptInfo = ex
                        End Try

                    Else
                        retVal.Result = LdapValidatorResultType.NonExistentUser


                    End If
                Catch ex As Novell.Directory.Ldap.LdapException
                    Select Case ex.ResultCode
                        Case Novell.Directory.Ldap.LdapException.INVALID_CREDENTIALS
                            retVal.Result = LdapValidatorResultType.InvalidBindUserNameOrPassword
                        Case Novell.Directory.Ldap.LdapException.CONNECT_ERROR
                            retVal.Result = LdapValidatorResultType.ServerDown
                    End Select

                    retVal.ExceptInfo = ex
                End Try

            Catch ex As Novell.Directory.Ldap.LdapException
                Dim cause As System.Net.Sockets.SocketException = TryCast(ex.Cause, System.Net.Sockets.SocketException)
                If cause IsNot Nothing Then
                    Select Case cause.ErrorCode
                        Case 1101
                            retVal.Result = LdapValidatorResultType.InvalidNameIp
                        Case 1106
                            retVal.Result = LdapValidatorResultType.RefusedConnectionOnPort
                        Case 10060
                            retVal.Result = LdapValidatorResultType.ServerDown
                    End Select
                End If
                retVal.ExceptInfo = ex
            End Try

            Return retVal
        End Function
4

1 に答える 1

0

アプリが使用するドメインにユーザー アカウントを作成するよう求めているようです。すべてのオブジェクトには識別名 (DN) があります。そのため、作成したユーザーの DN とそのパスワード、およびユーザーを作成したコンテナーの DN を求めています。ドメインの DNS 名はわかりませんが、AWare だと思います。サーバ。したがって、パスワード P@ssw0rd を使用して、デフォルトの Users コンテナーにユーザー名 appuser を持つユーザーを作成する場合は、次のように指定します。

サービス アカウント DN: CN=appuser,CN=Users,DC=AWare,DC=Server サービス アカウント パスワード: P@ssw0rd ユーザー アカウント コンテナ: CN=Users,DC=AWare,DC=Server

于 2013-04-03T19:34:00.037 に答える