114 messaggi dal 19 marzo 2004
Se metto il codice sotto riportato (parte 1 + parte 2) nell'evento click di un bottone su un web form mi dice che l'utente giovanni è un amministratore.

Se metto la parte 1 nell'evento Application_AuthenticateRequest del global.asax e la parte 2 nell'evento click di un web form mi ritorna sempre la scritta "non sei Administrator".

Sbaglio evento o la cosa funzionava solo in asp.net 1.1?

'parte 1
Dim MyIdentity As New System.Security.Principal.GenericIdentity("giovanni")
Dim MyStringArray As String() = {"Administrator", "developer"}
Dim MyPrincipal As New System.Security.Principal.GenericPrincipal(MyIdentity, MyStringArray)
HttpContext.Current.User = MyPrincipal

'parte 2
If User.IsInRole("Administrator") Then
Label2.Text = "Ruolo: Administrator"
Else
Label2.Text = "non sei Administrator"
End If
Posta il codice che utilizzi in login.

FormsAuthentication e FormsAuthenticationTicket come vengono utilizzati ?

Fabrizio Canevali
114 messaggi dal 19 marzo 2004
PASSO 1
------------------------------------------------------------
Nella pagina login.aspx c'è un bottone nel cui evento click ho scritto:

FormsAuthentication.RedirectFromLoginPage("pippo", False)

l'intento è quello di rendere autenticato un utente di nome pippo.


PASSO 2
------------------------------------------------------------
nel global.asax c'è scritto:

Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
Dim MyIdentity As New System.Security.Principal.GenericIdentity("pippo")
Dim MyStringArray As String() = {"Administrator", "Developer"}
Dim MyPrincipal As New System.Security.Principal.GenericPrincipal(MyIdentity, MyStringArray)
'HttpContext.Current.User = MyPrincipal
System.Threading.Thread.CurrentPrincipal = MyPrincipal
End Sub

l'intento è quello di assengare all'utente pippo il ruolo di Administrator e Developer.


PASSO 3
------------------------------------------------------------
Nella pagina default.aspx c'è scritto:

Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
If Context.User.IsInRole("Administrator") = True Then
Label2.Text = "Ruolo: Administrator"
Else
Label2.Text = "non sei Administrator"
End If
End Sub


RISULTATO
------------------------------------------------------------
Mi risponde sempre "non sei administrator"
114 messaggi dal 19 marzo 2004
Ah, dimenticavo. Il codice che funziona è questo (messo in una qualsiasi webform):

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

'pezzo 1
Dim MyIdentity As New System.Security.Principal.GenericIdentity("pippo")
Dim MyStringArray As String() = {"Administrator", "developer"}
Dim MyPrincipal As New System.Security.Principal.GenericPrincipal(MyIdentity, MyStringArray)
'Context.User = MyPrincipal
HttpContext.Current.User = MyPrincipal


'pezzo 2
If User.IsInRole("Administrator") Then
Label2.Text = "Ruolo: Administrator"
Else
Label2.Text = "non sei Administrator"
End If
End Sub

Risponde sempre "Ruolo: Administrator". Ma a me, per ovvi motivi serve mettere il pezzo 1 in global.asax ed il pezzo 2 in una web form.
Vabbe, ho visto che mancano un po di pezzi.

Giro il codice completo (o quasi)

Login Page
FormsAuthenticationTicket authTicket = new
                    FormsAuthenticationTicket(1,                   // versione 
                                      txtUserId.Text,              // user name 
                                      DateTime.Now,                // creazione 
                                      DateTime.Now.AddMinutes(60),// Scadenza 
                                      false,                      // IsPersistent 
                                      roles);                    // User data 

                    string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
                    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
                    Response.Cookies.Add(authCookie);
                    FormsAuthentication.RedirectFromLoginPage(txtUserId.Text, false);

global.asax
void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        string cookieName = FormsAuthentication.FormsCookieName;
        HttpCookie authCookie = Context.Request.Cookies[cookieName];
        if (null == authCookie)
        { 
            return;
        }
        FormsAuthenticationTicket authTicket = null;
        try
        {
            authTicket = FormsAuthentication.Decrypt(authCookie.Value);
        }
        catch 
        {
            return;
        }
        if (null == authTicket)
        {
            return;
        }
        string[] roles = authTicket.UserData.Split(new char[] { '|' });
        FormsIdentity id = new FormsIdentity(authTicket);
         
        GenericPrincipal principal = new GenericPrincipal(id, roles);
   
        Context.User = principal; 

    }

Fabrizio Canevali

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.