Классическая аутентификация ASP в Active Directory

У меня есть классический веб-сайт ASP (извините!). В некоторых его частях должна быть включена аутентификация NT.

В идеале я хотел бы предоставить пользователю красивую форму входа (а не приглашение браузера), которую я затем аутентифицирую в AD, а затем выполняю обычный «вход в систему в случае успеха, показ ошибки в случае сбоя».

Это вообще возможно? Я пробовал следующее на локальном компьютере, но не уверен, как правильно проверить успех или даже расширяется ли он до поиска в AD

<html>
<head>
</head>
<body>
    <form action="test.asp" method="post">
        Username:
        <input type="text" name="strUserName"><br>
        Password:
        <input type="password" name="strPassword"><br>
        <input type="submit" name="btnSubmit">
    </form>
    <%
    If Request.Form("strUsername") <> "" Then
        Dim strADsPath
        strADsPath = "WinNT://ARIA"
        strUserName = Request.Form("strUserName")
        strPassword = Request.Form("strPassword")

        'Set adObject = GetObject("WinNT:")
        'Set userObject = adObject.OpenDSObject("WinNT://" & domainName, userName, password, ADS_SECURE_AUTHENTICATION)


        if (not strADsPath= "") then
            Dim oADsObject
            Set oADsObject = GetObject(strADsPath)

            response.write "Authenticating...<br><br>"

            Dim strADsNamespace
            Dim oADsNamespace

            strADsNamespace = left(strADsPath, instr(strADsPath, ":"))
            set oADsNamespace = GetObject(strADsNamespace)

            Set oADsObject = oADsNamespace.OpenDSObject(strADsPath, strUserName,strPassword, 0)

            if not (Err.number = 0) then
                Response.Write "<font color='red'><font size = 5><u><b>Authentication has failed...<b></u></font></font>"
                Session("Auth") = "NO"
            else
                Response.Write "<font color='blue'>USER AUTHENTICATED!</font><br>"
                Session("Auth") = "YES"
            end if
        end if
    End If
    %>
</body>
</html>

Итак, после аутентификации можно ли получить другие данные, такие как электронная почта и группы?

Я пробовал следовать классическому ASP ( VBScript), 2008 R2, ошибка при использовании AD для аутентификации и попытка аутентификации на моей локальной машине, но она ВСЕГДА аутентифицируется независимо от того, что я ввожу. Является ли тот факт, что я использую локальную машину, означает, что это просто не будет Работа?


person pee2pee    schedule 10.03.2014    source источник
comment
Для этого вам понадобится Anonymous Authentication, так как вы передаете учетные данные в IIS, не нужно выполнять аутентификацию. Имейте в виду, что этот метод подвержен атаке «человек посередине», я обычно использую этот метод только в закрытой среде, такой как корпоративная интрасеть, и даже в этом случае он не на 100% безопасен.   -  person user692942    schedule 10.03.2014
comment
Не могли бы вы пролить больше света на человека в средней ситуации, пожалуйста?   -  person pee2pee    schedule 11.03.2014
comment
Вы хотите предоставить свой собственный пользовательский интерфейс для аутентификации в Active Directory, это означает, что клиент должен будет предоставить свое имя пользователя и пароль Windows в HTML-форме, которая будет опубликована в виде открытого текста. Защитите это, запустив ваш сайт на SSL-соединении. является обязательным.   -  person user692942    schedule 11.03.2014


Ответы (1)


Я знаю, что это старый вопрос, но если кому-то все еще интересно:

Вот как я аутентифицирую пользователей в AD: это косвенный подход с использованием аутентифицированного запроса LDAP. Если запрос завершается ошибкой, пользователю не разрешается проходить аутентификацию на контроллере домена.

Это немного неэлегантно, поскольку требует явного именования контроллера домена. доменное имя (если вы хотите использовать одинаковые имена учетных записей) и OU для начала поиска DN.

  dim domainController : domainController = "yourdc.company.com"
  dim ldapPort : ldapPort = 389
  dim startOu : startOu = "DC=company,DC=com"

  Function CheckLogin( szUserName, szPassword)
    CheckLogin = False

    szUserName = trim( "" &  szUserName)

    dim oCon : Set oCon = Server.CreateObject("ADODB.Connection")
    oCon.Provider = "ADsDSOObject"
    oCon.Properties("User ID") = szUserName
    oCon.Properties("Password") = szPassword
    oCon.Open "ADProvider"
    dim oCmd : Set oCmd = Server.CreateObject("ADODB.Command")
    Set oCmd.ActiveConnection = oCon

    ' let's look for the mail address of a non exitsting user
    dim szDummyQuery : szDummyQuery = "(&(objectCategory=person)(samaccountname=DeGaullesC))"
    dim szDummyProperties : szDummyProperties = "mail"
    dim cmd : cmd = "<" & "LDAP://" & domainController & ":" & ldapPort & _
                        "/" & startOu & ">;" & szDummyQuery & ";" & szDummyProperties & ";subtree"
    oCmd.CommandText = cmd
    oCmd.Properties("Page Size") = 100
    on error resume next
    dim rs : Set rs = oCmd.Execute
    if err.Number = 0 then
      CheckLogin = true
      call rs.Close()
      set rs = nothing
    end if
    on error goto 0
    set oCmd = nothing
  End Function

  ' perform test
  dim res : res = CheckLogin( "youradname\youruser", "yourpassword")
  if res then
    Response.Write( "Login ok")
  else
    Response.Write( "Login failed")
  end if
person schudel    schedule 09.02.2015