Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


.Net DirectoryServices komponent i ASP 3 - error

Postades av 2004-11-30 11:01:54 - Staffan sjöstedt, i forum active directory, Tråden har 4 Kommentarer och lästs av 1610 personer

Hej
Jag har gjort en komponent i C# .Net som läser av AD:t.
Jag har reggat dem i GACen och skapat en tlb och reggat den med RegAsm.

Den skall alltså användas på en vanlig ASP-sida. Men se, det vill sig icke.

Här är delar av ASP-koden (JScript)

var sLoginName = new String(Request("LOGON_USER"))
sNTLogin = sLoginName.split("\\")
sNTLogin = sNTLogin[ sNTLogin.length - 1 ]
      
Response.Write( sNTLogin + '<br>\n' )
      
oLDAP = Server.CreateObject("SiteBase.AD.ADBrowser");
Response.Write( oLDAP + '<br>\n' )
Session("adminID") = oLDAP.GetGUID(sNTLogin)

På sista raden kraschar det. Meddelande:
System.DirectoryServices error '80072020'
An operations error occurred

Om jag gör en ASP.NET-sida som gör samma sak funkar det. Är det något särskilt man måste tänka på när man gör anrop mot DirectoryServices i form av ett COM-Object??
Se här nedan de relevanta delarna av komponenten

Tacksam för all hjälp
/Staffan


[ClassInterfaceAttribute( ClassInterfaceType.AutoDual)]
   public class ADBrowser
   {
   
      /// <summary>
      /// enumeration for internal use
      /// </summary>
      enum ADtype
      {
         user=1,
         group
      }
      
      private string RootDseNamingContext = null;
      
      /// <summary>
      /// <para>No parameters, suitable for COM.</para>
      /// </summary>
      public ADBrowser()
      {
         DirectoryEntry de = new System.DirectoryServices.DirectoryEntry( "LDAP://RootDSE" );
         if( de.Properties["defaultNamingContext"][0] != null )
            this.RootDseNamingContext = de.Properties["defaultNamingContext"][0].ToString();
      }

      /// <summary>
      /// <para>Get the GUID string for a person in {a0a7e1f2-0c3b-42cd-9d1b-7ea97ec2299b} - format</para>
      /// </summary>
      /// <param name="loginid">NT login name for the person</param>
      /// <returns>A string with the GUID or null if failure</returns>
      public string GetGUID( string loginid )
      {
         
         DirectoryEntry myDE = this.GetDE();
         if( myDE == null )
            return null;

         DirectorySearcher mySearcher = new DirectorySearcher(myDE);

         string filter = "(&(ObjectCategory=User)(sAMAccountName=" 
            + loginid + "))";

         mySearcher.Filter = filter;
         mySearcher.SearchScope = SearchScope.Subtree;

         SearchResult result = mySearcher.FindOne();
         if( result == null )
            return null;

         DirectoryEntry de = result.GetDirectoryEntry();
         return result.GetDirectoryEntry().Guid.ToString( "B" );
      }


      /// <summary>
      /// <para>Get the root <see cref="System.DirectoryServices.DirectoryEntry"/> of the AD</para>
      /// </summary>
      /// <returns><see cref="System.DirectoryServices.DirectoryEntry"/></returns>
      private DirectoryEntry GetDE()
      {
         if( RootDseNamingContext != null )
            return new System.DirectoryServices.DirectoryEntry( "LDAP://" + RootDseNamingContext  );
         else
            return null;

      }

   }
}


Svara

Sv: .Net DirectoryServices komponent i ASP 3 - error

Postades av 2004-12-02 00:31:46 - Pelle Johansson

Det jag funderar på är att asp.exe kanske inte har rättigheter att kalla/köra din dll. Du säger att den fungerar i asp.net, det tyder nämligen på att rättigheterna är ok.


Svara

Sv:.Net DirectoryServices komponent i ASP 3 - error

Postades av 2004-12-02 17:07:28 - Staffan sjöstedt

Jo tänkte på det oxå
men dessa rader funkar bra.

oLDAP = Server.CreateObject("SiteBase.AD.ADBrowser");
Response.Write( oLDAP + '<br>\n' )


Dessutom har jag idag testat vidare en smula och funnit
om jag loggar in på servern, med lokal admin behörighet, och startar IE där så funkar det.

Men ligger jag på samma nätverk (med samma identitet som jag loggar på med ovan ) på en annan maskin så ballar det ur.

så VAR sätter jag rättigheter för en besökare (vanlig domän User i domänen i fråga ) på servern
att läsa AD:t?


Svara

Sv: .Net DirectoryServices komponent i ASP 3 - error

Postades av 2004-12-02 19:32:46 - Pelle Johansson

Du får nog rikta in dig på två steg. 1 att asp får göra anropet. 2. att dll:en får kalla på ad:t. Eftersom en surfare alltid är guest som kallar på hela ledet här så måste mer rättigheter till på din komponent tror jag. Lägg till lite mer felhantering i din komponent så du får bättre svar också eller låt den logga ner till något. Eller hooka på vs.net debugging på din funktion så du ser vart det smäller.


Svara

Sv: .Net DirectoryServices komponent i ASP 3 - error

Postades av 2004-12-09 09:05:26 - Staffan sjöstedt

Hej igen
Tack för dina tips Pelle

Nu har hunnit testa vidare och funnit en halv lösning
När jag skapar ett DirectoryEntry för sökning görs detta i min funktion GetDE().
Om jag där använder loginuppgifter (vilket jag inte gjort tidigare) för en vanlig domänanvändare så, YES, funkar det klockrent även i gamla ASP 3.

Slutledning & Ny fråga
.NET komponent som körs som COM får inte med sig några loginuppgifter när den skall göra uppslag i AD:t via System.DirectoryServices.
I ASP.NET klarar man det med Impersonation men hur löser man detsamma i ASP?

Och ja, jag har på IIS:en angett Ingen anonymn besökare, Windows-login - så webbanvändaren är en domänanvändare.

Kan man komma runt/lösa detta?
Det vore kul & slippa ha en dummy-användare i AD:t bara för detta.

Har någon stött på detta & kan ge tips eller länk till ngn artikel vore jag tacksam.


Nu ser ASP-koden ut som följer:

if(Request("LOGON_USER") == "")
{
	Response.Status = "401 Access Denied"
	Response.End
}

sNTLogin = sLoginName.split("\\");
sNTLogin = sNTLogin[ sNTLogin.length - 1 ];

// funkar
oLDAP = Server.CreateObject("SiteBase.AD.ADBrowser");


// ange en domänanvändare
oLDAP.ADUser = "Staffan Sjöstedt";
oLDAP.ADUserPasswd = "<sssshh>";


// funkar
Response.Write( oLDAP.RootDseNamingContext + '<br>\n' )

// ger inget resultat om man inte anger en domänanvändare ovan
// se C#-koden nedan
var adminID = oLDAP.GetGUID(sNTLogin);




DVS
1) jag kan skapa en instans av objektet.
2) I konstruktorn görs ett uppslag i AD för att finna RootDSE.
DirectoryEntry de = new System.DirectoryServices.DirectoryEntry( "LDAP://RootDSE" );  )

Detta funkar och kan läsas i propertyn "RootDseNamingContext"

Men när ett uppslag skall göras för att ta fram en DirectoryEntry utfrån ett NTlogin så ger sökningen ett fel.

public string GetGUID( string loginid )
{
	
	DirectoryEntry myDE = this.GetDE();
	if( myDE == null )
		return null;

	DirectorySearcher mySearcher = new DirectorySearcher(myDE);

	string filter = "(&(ObjectCategory=User)(sAMAccountName=" 
		+ loginid + "))";

	mySearcher.Filter = filter;
	mySearcher.SearchScope = SearchScope.Subtree;
	SearchResult result = null;
	try
	{
		result = mySearcher.FindOne();
	}
	catch( Exception e )
	{
		this.lastError = "GetGUID( " + loginid + " ); Error in FindOne(). Message: " + e.Message;
		if( e.InnerException != null )
			this.lastError += Environment.NewLine + "InnerException=" + e.InnerException.Message;
		return null;
	}
	if( result == null )
	{
		this.lastError = "GetGUID( " + loginid + " ); FindOne() returned null";
		return null;
	}

	DirectoryEntry de = result.GetDirectoryEntry();
	this.adUser = de.Username;
	return de.Guid.ToString( "B" );
}

private DirectoryEntry GetDE()
{
	if( rootDseNamingContext != null )
	{
		// skicka med loginuppgifter - tillägg efter div tester. Detta löser problemet i ASP 3
		// men kan man undvika detta???
		if( ( this.adUser != null ) && ( this.adUserPasswd != null ) )
			return new System.DirectoryServices.DirectoryEntry(  "LDAP://" + rootDseNamingContext, 
				this.adUser, 
				this.adUserPasswd, 
				AuthenticationTypes.ReadonlyServer  );
		else  // inga loginuppgifter krävs
			return new System.DirectoryServices.DirectoryEntry( "LDAP://" + rootDseNamingContext  );
	}
	else
		return null;

}





Det enda felmeddelande jag får ut är fortfarande: "An operations error occurred."
Felet kastas vid anropet till DirectorySearcher.FindOne().

Detta sker även om besökaren är DomänAdmin.
MEN
om man som sagt kör webbläsaren på servern med en användare som har lokala adminrättigheter på den kärran - så funkar det.


/Staffan


Svara

Nyligen

  • 21:41 Automotive Services UK
  • 20:44 Erfarenhet av CBD-olja mot sömnpro
  • 12:13 Sex Dolls for Sale
  • 19:42 Online Casinos for Haitian Players
  • 19:38 Rekommendera något intressant
  • 19:13 Международная перевозка грузов
  • 00:01 DL Van Tuning | Exclusive Body Kit
  • 12:08 Indian casino

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 880
27 965
271 776
827
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies