J'utilise ASP.NET MVC. J'ai un accès restreint au site Web à l'aide de l'authentification des formulaires ASP. Cependant, les pages Web contiennent des liens vers des fichiers PDF sur le serveur que je souhaite également protéger. p>
Par exemple, l'utilisateur peut parcourir FOO.com et FOO.com/Account/Logon. Une fois qu'ils sont connectés, ils peuvent accéder à FOO.com/Category/bar qui présente la vue à Bar.aspx. Sur cette vue est un lien vers foo.com/files/theta.pdf qui se charge dans le navigateur tout à fait. Cependant, je ne veux pas foo.com/files/theta.pdf accessible à partir du navigateur, à moins que l'utilisateur ne soit authentifié. p>
Comment empêcher un utilisateur d'accéder à FOO.com/files/theta.pdf directement à partir de son navigateur sans d'abord authentifier à Foo.com/Account/Logon? P>
4 Réponses :
Passez la demande via un contrôleur et renvoyez un Il y a un exemple de ce code à Cette question < / a>, qui illustre comment renvoyer un fichier image. Il suffit de renvoyer votre PDF au lieu du fichier image et utilisez FileSult code>. Vous pouvez appliquer n'importe quelle sécurité que vous souhaitez à la méthode du contrôleur, soit à l'aide de l'attribut
Autoriser code>, soit en cochant les autorisations à l'intérieur de la méthode du contrôleur. P>
application / pdf code> comme type MIME. P>
Merci. J'ai changé le contrôleur pour accepter un paramètre identifiant le fichier, puis construit le chemin et renvoyé un fileresult. Qui a eu l'effet souhaité de l'affichage du PDF. Cependant, un utilisateur pourrait toujours ajouter tout le lien dans le navigateur et l'amener. J'ai essayé d'ajouter l'élément d'emplacement à la configuration Web comme suggéré par Charles mais cela n'a pas fait le tour (peut-être que j'ai fait quelque chose de mal). J'ai été capable d'obtenir l'effet désiré cependant en ajoutant une règle de «refuser» sur ce dossier à l'aide de Gestionnaire IIS. Alors maintenant, l'utilisateur ne peut pas afficher directement le PDF.
Cependant, un utilisateur pourrait toujours ajouter tout le lien dans le navigateur et l'amener. Code> - C'est pourquoi vous ajoutez l'attribut Authorize à la méthode du contrôleur, afin de limiter l'accès à ces utilisateurs qui sont affectés à le rôle approprié. Si l'utilisateur Type dans une URL, l'accès auquel il est refusé, il peut être redirigé vers une page de connexion ou non autorisée au lieu de renvoyer le
Fileresult code>. C'est la même sécurité que vous ajouteriez à toute méthode de contrôleur i> pour autoriser ou refuser l'accès en fonction des rôles attribués par l'utilisateur. Plus d'infos Ici: NERDDINNERBOOK.S3.AMAZONAWS.COM/PART9.HTM
Si vous souhaitez restreindre tous les accès au répertoire EG P> / fichiers code>, vous pouvez simplement utiliser un élément code> Emplacement code> dans votre
web.config code> pour restreindre Accès.
<location path="~/files">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
Ne limite pas les fichiers statiques, ils sont géré par le module de gestionnaire StaticFilemodule, qui n'utilise pas votre configuration d'autorisation.
Utilisez la fileresult, ce qui, selon moi, est une action intégrée. Cela va envoyer des données binaires que vous pouvez avoir toutes sortes d'autorisations autour de: P>
http://msdn.microsoft.com /en-us/library/system.web.mvc.fileresult.aspx P>
Comment cela limite-t-il l'accès au support si un utilisateur connaît l'URL aux médias?
Si vous avez utilisé ASP.NET CORE, vous pouvez utiliser Autorisation basée sur les ressources P>
La stratégie d'autorisation dépend de la ressource accédée. Considérez un document qui possède une propriété d'auteur. Seul l'auteur est autorisé à mettre à jour le document. Par conséquent, le document doit être récupéré à partir du magasin de données avant que l'évaluation de l'autorisation puisse se produire. P>