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: 1141 | Odgovora: 2 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Deep|Blue
Srce Srbije

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

ICQ: 101830817


Profil

icon Win aplikacija - pristup mrezi pod odredjenim user nalogom 30.03.2005. u 14:40

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???

Dragi boze koji jesi, gore na nebesima
Sorry što te davim u ovaj kasni sat
Ali, ja prije svitanja imam jos par pitanja
30.03.2005. u 14:40 

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
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.
31.03.2005. u 12:02 

mmix
Miljan Mitrovic
Software Architect
Pancevo, Srbija

SuperModerator
Član broj: 17944
Poruke: 2408
*.logic.bm.



Profil

icon Re: Win aplikacija - pristup mrezi pod odredjenim user nalogom 31.03.2005. u 14:02
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...


▪ The quicker a phone is answered in sales, the slower it's answered in customer services - Brownridge's Law
▪ Democracy is a device that ensures we shall be governed no better than we deserve - George Bernard Shaw
▪ To err is human--and to blame it on a computer is even more so - Robert Orben
Prikačeni fajlovi
31.03.2005. u 14:02 

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

[ Pregleda: 1141 | Odgovora: 2 ]

Postavi temu Odgovori

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