1 messaggio dal 18 novembre 2006
salve,
ho trovato molto interessante l'articolo è ho cercato di applicarlo, ma ho un problema che non riesco a risolvere: il mio sito ha una directory principale accessibile a tutti e alcune directory accessibili solamente con l'opportuno ruolo. Ho creato inserito nel file global.asa il seguente codice:
Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs)
' Generato durante il tentativo di autenticazione dell'utente
If Request.IsAuthenticated Then
Dim role As String
Dim nome As String = User.Identity.Name
role = nome.Substring(nome.IndexOf(":") + 1)
Dim Ruolo() As String = {role}
Dim identita As GenericIdentity = New GenericIdentity(nome)
Context.User = New GenericPrincipal(identita, Ruolo)
End If
End Sub
Nella directory principale del sito il seguente web.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<compilation defaultLanguage="vb" debug="true" />
<customErrors mode="RemoteOnly" />
<authentication mode="Forms" >
<forms name="AuthCookie" path="/Jetexpress" loginUrl="LoginForm.aspx" protection="All" />
</authentication>
<authorization>
<allow users="*">
</allow>
</authorization>
<trace enabled="false" requestLimit="10" pageOutput="false" traceMode="SortByTime" localOnly="true" />
<sessionState
mode="InProc"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="20"
/>
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
</system.web>
<appSettings>
<add key="OleDbStr" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\inetpub\wwwroot\web\JetPresePg1\Db\JETDB.MDB" />
<add key="OleDbAs400Gb" value="Provider=IBMDA400.DataSource.1;Force Translate=65535;Persist Security Info=False;User ID=QSECOFR;Data Source=192.168.103.243"/>
<add key="OleDbAs400" value="Provider=IBMDA400.DataSource.1;Force Translate=65535;Password=RUDELLO;Persist Security Info=True;User ID=RUDELLO;Data Source=192.168.100.200"/>
<add key="OleDbSql" value="Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;User ID=sa;Initial Catalog=JetDb;Data Source=mrsrl"/>
<add key="MailTO" value="marco.rudello@gruppoblue.it" />
<add key="MailCC" value="prese@jetexpress.it" />
<add key="MailFrom" value="WEB@jetexpress.it" />
<add key="ServerMail" value="217.133.205.136" />
<add key="TipoDb" value="OleDbSql" />
</appSettings>
</configuration>
Nella directory riservata Amministrazione il seguente web.config:
?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.web>
<authentication mode="Forms" >
<forms name="AuthCookie" path="/Jetexpress" loginUrl="../LoginForm.aspx" protection="All" />
</authentication>
<authorization>
<deny users="?" />
<allow roles="Amministratore">
</allow>
<deny users="*" />
</authorization>
</system.web>
</configuration>
La pagina che esegue il login contiene il seguente codice:
Private Sub BtOk_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtOk.Click
Dim Utente As String
Dim LdapAuth As New Web.Security.FormsAuthentication
Dim Mypass As String = LdapAuth.HashPasswordForStoringInConfigFile(TextBoxPassword.Text, "sha1")
Dim MyDoc As New System.Xml.XmlDocument
MyDoc.Load(Server.MapPath("Users.xml"))
Dim UserUtente As XmlNode
Dim nodeList As XmlNodeList
Dim root As XmlElement = MyDoc.DocumentElement
Try
UserUtente = root.SelectSingleNode("/Users/User[@UserUtente='" & TextBoxUser.Text & "'][@UserAttivo='1']")
Catch ek As Exception
'Dim e As EventArgs
Application_Error(ek.Source & ek.Message, e)
Catch et As ArgumentException
'Dim et As EventArgs
Application_Error(et.Source & et.Message, e)
Catch ec As ConfigurationException
'Dim ec As EventArgs
Application_Error(ec.Source & ec.Message, e)
Catch eda As DataException
''Dim eda As EventArgs
Application_Error(eda.Source & eda.Message, e)
Catch edb As XmlException
'Dim edb As EventArgs
Application_Error(edb.Source & edb.Message, e)
Catch ex As Exception
While Not (ex.InnerException Is Nothing)
Dim a As EventArgs
Application_Error("The following InnerException reported: " + ex.InnerException.ToString(), a)
ex = ex.InnerException
End While
End Try
If Not UserUtente Is Nothing Then
UserConn = TextBoxUser.Text & ":" & UserUtente.LastChild.LastChild.Value
'LdapAuth.SetAuthCookie(UserConn, False)
Dim Ruolo() As String = {UserUtente.LastChild.LastChild.Value}
Dim identita As GenericIdentity = New GenericIdentity(UserConn)
Context.User = New GenericPrincipal(identita, Ruolo)
Dim x As String = LdapAuth.GetRedirectUrl(UserConn, False)
If User.IsInRole("Amministratore") Then
'Response.Redirect(LdapAuth.GetRedirectUrl(TextBoxUser.Text, False))
'End If
LdapAuth.RedirectFromLoginPage(UserConn, False)
End If
Else
Response.Redirect("ErrLogin.aspx")
End If
End Sub
come si nota uso un opportuno file XML per contenere i profili degli utenti, che è così strutturato:
<?xml version="1.0" encoding="utf-8" ?>
<Users>
<User UserUtente='a' UserPassword='E9D71F5EE7C92D6DC9E92FFDAD17B8BD49418F98' UserAttivo='1'>
<UserEmail>jchen@contoso.com</UserEmail>
<UserNome>Jan</UserNome>
<UserCognome>Cheng</UserCognome>
<UserRuolo>Lettore</UserRuolo>
</User>
<User UserUtente='Pluto' UserPassword='BA56E5E0366D003E98EA1C7F04ABF8FCB3753889' UserAttivo='1'>
<UserEmail>Kim@contoso.com</UserEmail>
<UserNome>Kim</UserNome>
<UserCognome>Crimson</UserCognome>
<UserRuolo>Lettore</UserRuolo>
</User>
<User UserUtente='Admin' UserPassword='BA56E5E0366D003E98EA1C7F04ABF8FCB3753889' UserAttivo='1'>
<UserEmail>Administrator@jetexpress.it</UserEmail>
<UserNome>Amministratore</UserNome>
<UserCognome>Bingo</UserCognome>
<UserRuolo>Amministratore</UserRuolo>
</User>
</Users>
Il problema è che se tento di accedere alla directory riservata "Amministrazione" ASP.NET mi ridirige alla pagina di login, ma, dopo aver effettuato la login correttamente, non vengo ridiretto alla pagina richiesta ma rimango continuamente sulla pagina di login. sembra che la ridirecturl non funzioni.
Mi potete aiutare a risolvere il problema? ambiente VS2003

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.