Me encuentro con que quiero proteger el acceso a los ficheros SWF de una carpeta.
Pero en estos ficheros SWF, el mismo flash llama a otros ficheros de otro tipo (xml, bin...) que se encuentran en la misma carpeta, y son necesarios para la correcta ejecución del flash.
Por este motivo es por lo que no me sirven las soluciones que he encontrado hasta ahora:
1. Una solución es proteger el acceso para usuarios autenticados mediante "location path" en el fichero web.config. El problema de esto es que solamente se tienen en cuenta las llamadas a ficheros procesados por IIS (asp, aspx...), pero si intentas acceder directamente a la URL del fichero SWF, tienes acceso sin estar autenticado.
2. Otra solución es tener los ficheros en una carpeta no accesible desde internet, y mediante un httphandler gestionar la llamada del fichero. Sería un código parecido a este:
Código VB.NET:
El problema de esto es que solamente se trae el fichero SWF a modo de descarga, y cuando intenta ejecutarlo da error al no encontrar el resto de ficheros de deberían acompañarle.Ver original
Response.Clear() Response.ContentType = "application/x-shockwave-flash" Response.AddHeader("Content-Disposition", "attachment;filename=file.swf") Dim strFile As String = "C:\files\file.swf" Response.WriteFile(strFile) Response.End()
Por este motivo me encuentro sin solución al problema todavía.
Si el fichero SWF, junto con los ficheros que lo acompañan, están ubicados en una carpeta accesible desde internet y pública, no hay problema y se ve todo bien.
Pero claro, el tema está en poder autenticar de alguna forma el acceso. Tampoco interesa ofrecer una descarga de un ZIP con todo el pack, ya que lo interesante que dar acceso via web a los contenidos y, precisamente, proteger la descarga de algun modo.
Aparentemente, debería ser sencillo el poder proteger el acceso a una carpeta, y sólo permitirlo para aquellos usuarios autenticados, independientemente del tipo de ficheros, pero me temo que va a ser más difícil de lo que parecía.
Espero alguien pueda vislumbrar alguna solución a este problema.
Gracias por la ayuda.