Hola a todos, gracias por leer este mensaje.
Notas:
La configuracion del IIS es con autenticacion anonima y windows (de
otro modo no puedo modificar, depurar, etc.) El Windows SBS 2003 no
se puede quitar porque es la licencia que trae el servidor. El sitio
de Microsoft no ofrece informacion sobre esta conducta.
El problema:
He implementado la autenticacion por forms usando una pagina
login.aspx y funciona de maravilla en máquinas con Windows 2000 Pro,
XP Pro SP2 y Windows 2003 Web Edition, pero en un servidor Small
Business Server tiene una conducta atípica, al intentar hacer login
el usuario efectivamente queda autenticado, pero permanece en la
página de login.
El web.config contiene esto:
...
<authentication mode="Forms">
<forms name=".user" loginUrl="~/login.aspx" protection="All"
timeout="720" slidingExpiration="true" />
</authentication>
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
...
el login.aspx contiene esto al inicio:
Imports System.Diagnostics
Imports System.Data.SqlClient
Imports System.Web.Security
El boton para autenticar contiene esto (solo pongo la parte que corre
cuando el usuario es valido):
...
Private Sub btnSignin_Click(ByVal sender As Object, ByVal e As
System.EventArgs) Handles btnSignin.Click
...
'//////////////////////////////////////////
' Generar un ticket de authenticacion
Dim tkt As FormsAuthenticationTicket
Dim cookiestr As String
Dim blnPersiste As Boolean = False
Dim intMinutos As Int16 = 30
Dim ck As HttpCookie
blnPersiste = True
tkt = New FormsAuthenticationTicket(1, _
user_id, _
DateTime.Now(), _
DateTime.Now.AddMinutes(intMinutos), _
blnPersiste, _
user_name)
cookiestr = FormsAuthentication.Encrypt(tkt)
ck = New HttpCookie( _
FormsAuthentication.FormsCookieName(),cookiestr)
If blnPersiste Then ck.Expires = tkt.Expiration
ck.Path = FormsAuthentication.FormsCookiePath()
Response.Cookies.Add(ck)
Dim strRedirect As String
strRedirect = Request("ReturnURL")
If strRedirect <> "" Then
Response.Redirect(strRedirect, True)
Else
strRedirect = "default.aspx"
Response.Redirect(strRedirect, True)
End If
'//////////////////////////////////////////
...
Comentarios: He sustituido las lineas Response.Redirect por
Server.Transfer, ya que las primeras envian a una página en blanco
(ese es otro problema: por qué los response.redirect envian a páginas en
blanco?)
Suponiendo que la lógica del ASP.NET está bien, ya que funciona en
otros sistemas operativos, qué se debe configurar en el Small
Business Server para que funcione?
Mil gracias
Marco Padierna
Leer las respuestas