brownpaperpackage.aspx? Id = {GUID}
En el evento Load del media.aspx, se verifica que el usuario es autenticado, a continuación, compruebe que el usuario tiene el derecho de ver los medios de comunicación, y si lo hacen, a continuación, cargue los medios como una secuencia y alimente a la respuesta de la página como Spikolynn demostrado.
¿Por qué hacerlo de esta manera? Es simple de codificar y obtienes todos los beneficios de los servicios de autenticación de ASP.NET e IIS, desde los cuales puedes encontrar al usuario que solicita los medios. Es trivial mapear a ese usuario en una lista de acceso para sus objetos multimedia. Y la página tiene el objeto de solicitud allí mismo. También está ocultando el nombre de los medios, por lo que no puede decir qué está pasando desde la URL.
¿Cómo se evita que las personas accedan a sus medios de comunicación directamente? Sus archivos multimedia no se pueden almacenar en el directorio virtual de IIS. Si lo son, existe la posibilidad de que se puedan descargar directamente. Puede almacenarlos en una base de datos como una matriz de bytes (blob) o almacenarlos en un disco fuera del directorio virtual web. Los usuarios deben pasar por ASP.NET para acceder a los archivos
¿Cómo se hace un seguimiento de qué usuarios tienen acceso a qué medio? Mantiene un registro de sus usuarios a través de la membresía de asp.net. Eso significa que cada usuario tiene una ID en la tabla aspnet_users. Cree una tabla para sus medios con una identificación y un nombre de archivo (o un blob que contenga los medios reales). Entonces solo necesitas crear una tercera tabla que conecte los dos. Esta tabla contendría una identificación de usuario y una identificación de medios, lo que significa que este usuario puede ver este medio. Con el identificador de usuario (de afiliación asp.net) y el ID de soporte (de la URL) sólo tiene que
select count(*) from UserMedia where UserId = @UserGuid and MediaId = @MediaIdFromUrl
y si el contador> 0, el usuario puede ver los medios de comunicación.
Un ejemplo de cómo se tendría que utilizar la URL:
<asp:image
runat="server"
ImageUrl="brownpaperpackage.aspx?id=53a2ea4(snip)76ca8b" />
lol - eso es como nivelar el centro de comercio mundial con varias armas nucleares cuando podrías hacerlo más fácil y precisamente con un termómetro ... en serio - también hay imágenes públicas - la técnica debería funcionar solo con archivos/carpetas específicos . – mson
Ummmm ... k. Entonces, ¿estás diciendo algo así en tu web.config no haría exactamente lo que estás pidiendo? Puede autorizar las visitas a/protected/lo que sea caso por caso con su autorización actual esquema. –
Lusid
Lo mejor es que no tiene que depender de que los usuarios modifiquen la URL para acceder a otros archivos. Fuerce al controlador para que requiera que los usuarios se autentiquen, luego realice una comprobación en la base de datos para determinar si tienen derechos sobre ese archivo. Entonces compartir URL tampoco funcionará sin compartir inicios de sesión también. – Lusid