Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Win aplikacija - pristup mrezi pod odredjenim user nalogom

[es] :: .NET :: Win aplikacija - pristup mrezi pod odredjenim user nalogom

[ Pregleda: 3402 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Deep|Blue
Srce Srbije

Član broj: 631
Poruke: 1431
*.yu1.net.

ICQ: 101830817


+314 Profil

icon Win aplikacija - pristup mrezi pod odredjenim user nalogom 30.03.2005. u 14:40 - pre 232 meseci
tj.
kako da iz aplikacije putem IO clase pristupim odredjenim lan lokacijama predstavljajuci se kao odredjeni user (sa pripadajucim pass-om) bez obzira koji je user logovan.
Takodje me interesuje, dal je moguce da aplikacija pristupa preko vise naloga lokalnim i mreznim lokacijama???

"Hmmm", rekao je, "...suprostavlja se nadrealizmu prikrivene metafore..." Razmišljao je tome na trenutak, a onda je zatvorio beležnicu s mrkim osmehom.
"I smrt je za njih suviše dobra"
 
Odgovor na temu

Mrav
Aleksandar Mraović
.net programer u Wireless Media
Beograd

Član broj: 6532
Poruke: 279
*.smin.sezampro.yu.

ICQ: 197419540


Profil

icon Re: Win aplikacija - pristup mrezi pod odredjenim user nalogom 31.03.2005. u 12:02 - pre 232 meseci
Pogledaj .net impersonation, u principu napraviš GenericPrinciple ili GenericIdentity objekat i vežeš ga za trenutni security context preko Thread.CurrentPrincipal


Evo primera sa GenericIdentity, u ovom slučaju moraš napraviti novi GenericIdentity koristeći GenericIdentity koji si napravio.

Code:
using System;
   using System.Security.Principal;
   using System.Threading;

    public class Class1
    {
        public static int Main(string[] args)
        {
         //Create generic identity.
         GenericIdentity MyIdentity = new GenericIdentity("MyIdentity");

         //Create generic principal.
         String[] MyStringArray = {"Manager", "Teller"};
         GenericPrincipal MyPrincipal = new GenericPrincipal(MyIdentity, MyStringArray);
         //Generic principal praviš konstruktorom koji prima
         //GenericIdentity i niz stringova koji označava uloge (roles)
         //kojima želiš da pridružiš identitet.
         
         //Attach the principal to the current thread.
         //This is not required unless repeated validation must occur,
         //other code in your application must validate, or the 
         // PrincipalPermisson object is used. 
         Thread.CurrentPrincipal = MyPrincipal;
         //I na kraju zakačiš tako stvoreni identitet za trenutni Thread.

         //Print values to the console.
         String Name =  MyPrincipal.Identity.Name;
         bool Auth =  MyPrincipal.Identity.IsAuthenticated; 
         bool IsInRole =  MyPrincipal.IsInRole("Manager");
         
         Console.WriteLine("The Name is: {0}", Name);
         Console.WriteLine("The IsAuthenticated is: {0}", Auth);
         Console.WriteLine("Is this a Manager? {0}", IsInRole);
         
         return 0;
        }
    }


Što se tiče pristupa preko više naloga to bi trebalo da je moguće ako opet promeniš Thread.CurrentPrincipal, ako bi hteo istovremeni pristup različitim identitetima sigurno da bi morao da napraviš novi thread za svaki novi identitet koji želiš da napraviš.

// havramm
Molim korisnike da kada postavljaju "snippet"-e da ih uokvire "code" tagovima.
Lepse je za citanje, ako nista drugo...

Lepota je u jednostavnosti.

Cis.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Win aplikacija - pristup mrezi pod odredjenim user nalogom 31.03.2005. u 14:02 - pre 232 meseci
Nažalost, Mrav-e, to ne rešava problem. Iako će CurrentPrincipal pokazivati na tvoj generic principal, to neće imati nikakvog uticaja na security limite koji su postavljani od strane Windows-a. Realno, laički, pogledaj kod i primetićeš da nigde nema lozinke, dakle kad bi to moglo ovako, .net aplikacija bi mogla sebi da dodeli administratorske privilegije i da vršlja po OSu . Zbog takvih bezobraznih namera Windows priznaje samo svoj mehanizam security token-a a jedini način da se dođe do tokena je preko API funkcije LogonUser:

Code:

    [DllImport("advapi32.dll", SetLastError=true)]
    public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, 
        int dwLogonType, int dwLogonProvider, ref IntPtr phToken);


phToken će imati handle na security token korisnika i taj isti handle se može iskoristiti da se kreira .net WindowsIdentity principal, koji ima metod Impersonate koji mu omogućava da privremeno promeni secuirty token trenutnog thread-a unutar samog OS-a.

Code:

            WindowsIdentity newId = new WindowsIdentity(tokenHandle);
            WindowsImpersonationContext impersonatedUser = newId.Impersonate();


WindowsImpersonationContext koji se vrati je u stvari "stari" korisnik i pozivom Undo metode stvari se vraćaju na mesto:

Code:

            impersonatedUser.Undo();


Sve OS operacije između Impersionate() i Undo() će raditi pod accountom "drugog" korisnika.

Zakačen je ceo kod (prerađen sample iz MSDNa), pa povadite šta vam treba...


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
Prikačeni fajlovi
 
Odgovor na temu

[es] :: .NET :: Win aplikacija - pristup mrezi pod odredjenim user nalogom

[ Pregleda: 3402 | Odgovora: 2 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.