>private void TestSecurityPrincipal() >{ > System.Security.Principal.GenericIdentity gi = new System.Security.Principal.GenericIdentity("BB"); > System.Security.Principal.GenericPrincipal gp = new System.Security.Principal.GenericPrincipal(gi, new string[] { "Admin", "Backup" }); > > // Test the value of > // Thread.CurrentPrincipal.Identity > // before and after this breakpoint > Thread.CurrentPrincipal = gp; > > // And again after this next statement executes > System.AppDomain.CurrentDomain.SetThreadPrincipal(gp); > > // Next, we're going to open another Form, and try some stuff from that Form. > //System.Security.Principal.IPrincipal g = System.Threading.Thread.CurrentPrincipal; > //g.Identity > > Form4 oForm = new Form4(); > oForm.Show(); >} >>
>System.Security.Principal.IPrincipal g = System.Threading.Thread.CurrentPrincipal;
>// Test the value:
>//g.Identity
>
>GenericIdentity g = new GenericIdentity("Viv"); >>GenericPrincipal p = new GenericPrincipal(g,new string[]{"Admin","Backup"}); >>Thread.CurrentPrincipal = p; >>// System.AppDomain.CurrentDomain.SetThreadPrincipal(p); //Worksthen later (in a different form)
System.Security.Principal.IPrincipal g = System.Threading.Thread.CurrentPrincipal;
>>but g.Identity at this point is an empty,unauthenticated instance (as it is before setting the Thread.CurrentPrincipal). If I use the CurrentDomain.SetThreadPrincipal version above instead then g.Identity is as expected. AFAICS this is still the same thread so why the difference?