Avatar billede josto Nybegynder
14. januar 2005 - 21:06 Der er 2 kommentarer og
1 løsning

Valider bruger via LDAP mod Active Directory

Har fundet et eksempel fra microsoft.com som jeg forsøger at få til at virke.

Test opstillingen er som følger:
- Serveren som er Domain Controler (Windows 2003) med Active Directory. Serverens navn er "Server", domænet er "intranet".
- Min klient (den som jeg udvikler på) med VS.Net.

Jeg har en form, hvor jeg kan indtaste brugernavn og password. Når brugeren trykker på en knap udføres følgende event:

LdapAuthentication ldap = new LdapAuthentication("LDAP://DC=Server");
label1.Text = "Bruger er: " + ldap.IsAuthenticated("intranet", username.Text, password.Text).ToString();

Når jeg afvikler koden får jeg en exception ved: return true;
Der gives følgende exception:

An unhandled exception of type 'System.Exception' occurred in LDAP1.exe
Additional information: Error authenticating user. Enten findes det angivne domæne ikke, eller også kunne der ikke oprettes forbindelse til det

Jeg har ved brug af en netværkssniffer (Ethereal) set at der ikke er nogen kommunikation mellem min maskine og serveren.

Kan ikke selv se fejlen/årsagen, nogen som kan hjælpe?

LdapAuthentication klassen:
----------------------------------------------------
using System;
using System.Text;
using System.Collections;
using System.DirectoryServices;

namespace LDAP1
{
    public class LdapAuthentication
    {
        private String _path;
        private String _filterAttribute;
       
        public LdapAuthentication(String path)
        {
            _path = path;
        }
               
        public bool IsAuthenticated(String domain, String username, String pwd)
        {
            String domainAndUsername = domain + @"\" + username;
            DirectoryEntry entry = new DirectoryEntry(_path, domainAndUsername, pwd);
                   
            try
            {   
                //Bind to the native AdsObject to force authentication.           
                Object obj = entry.NativeObject;
                //throw new Exception("Dette er en test");
                DirectorySearcher search = new DirectorySearcher(entry);
               
                search.Filter = "(SAMAccountName=" + username + ")";
                search.PropertiesToLoad.Add("cn");
                SearchResult result = search.FindOne();
       
                if(null == result)
                {
                    return false;
                }
       
                //Update the new path to the user in the directory.
                _path = result.Path;
                _filterAttribute = (String)result.Properties["cn"][0];
            }
            catch (Exception ex)
            {
                throw new Exception("Error authenticating user. " + ex.Message);
            }
       
            return true;
        }
       
        public String GetGroups()
        {
            DirectorySearcher search = new DirectorySearcher(_path);
            search.Filter = "(cn=" + _filterAttribute + ")";
            search.PropertiesToLoad.Add("memberOf");
            StringBuilder groupNames = new StringBuilder();
       
            try
            {
                SearchResult result = search.FindOne();
                int propertyCount = result.Properties["memberOf"].Count;
                String dn;
                int equalsIndex, commaIndex;
                       
                for(int propertyCounter = 0; propertyCounter < propertyCount; propertyCounter++)
                {
                    dn = (String)result.Properties["memberOf"][propertyCounter];
                    equalsIndex = dn.IndexOf("=", 1);
                    commaIndex = dn.IndexOf(",", 1);
                    if(-1 == equalsIndex)
                    {
                        return null;
                    }
                    groupNames.Append(dn.Substring((equalsIndex + 1), (commaIndex - equalsIndex) - 1));
                    groupNames.Append("|");
                }
            }
            catch(Exception ex)
            {
                throw new Exception("Error obtaining group names. " + ex.Message);
            }           
            return groupNames.ToString();
        }
    }
}
Avatar billede tander Nybegynder
15. januar 2005 - 02:12 #1
Under Controlpanel - Administrative Tools - Microsoft .NET Framework 1.1 Wizards - Adjust .NET Security - Local Intranet

Kan du ændre sikkerhed for .NET programmer for lokalt intranet. Det kan være der problemet ligger. Prøv at hæve tilladelsen til fuld tilladelse og se om det virker hvis ikke så sæt den tilbage.
Avatar billede josto Nybegynder
15. januar 2005 - 17:57 #2
Jeg har prøvet at ændre security på både klient og server. Men jeg får desværre stadig samme fejl.  Sikkerheden er sat til default igen.

Efter et par timer med Google har jeg fundet følgende link:
http://www.wimdows.net/newsgroups/viewthread.aspx?ngid=51&mid=%3CM4SdnV7c3eR7M1XcRVn-3g%40giganews.com%3E

Derfra ser det ud til at jeg ikke kan sende et brugernavn og password fra en klient til serveren.

Løsningen kunne således være:
1) Opret en web-service som kan validerer brugernavn og password mod AD via LDAP
2) Opret applikationen, således at den benytter web-servicen.

Vil afprøve dette nu.
Avatar billede josto Nybegynder
15. januar 2005 - 18:54 #3
Det virker!

Man skal således være sikker på at man har tilladelse til at validerer.

Lukker og slukker igen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Nye kolleger søges til IT Stab i Forsvaret

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Teamleder til AL Sydbanks GDPR & Tech Regulation i Aabenraa