J'ai une collection de feuilles de calcul Excel que j'aimerais utiliser dans l'application Web ASP.NET 5 uniquement pour les utilisateurs autorisés.
Merci beaucoup!
Oui, ils devraient aller dans wwwroot
. Il n'existe actuellement aucun moyen intégré pour sécuriser les répertoires wwwroot
. Mais créer un module de middleware pour le réaliser est assez simple. Il existe un tutoriel facile à suivre ici .
Si vous n'êtes pas habitué au développement de middleware, j'ai posté un projet GitHub qui montre comment créer un middleware en trois étapes simples. Vous pouvez télécharger le projet ici .
Vous n'avez pas besoin d'un contrôleur pour accéder aux fichiers statiques.
dans .net core, créez un répertoire dédié www au même niveau que wwwroot et utilisez le code suivant:
public HomeController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
[Authorize(Roles = "SomeRole")]
public IActionResult Performance()
{
return PhysicalFile(Path.Combine(_hostingEnvironment.ContentRootPath,
"www", "MyStaticFile.pdf"), "application/pdf");
}
Basé sur la réponse suivante (pour .netCore): autorisation de fichier statique
Pour vérifier l'authentification lors de la récupération du fichier:
app.UseStaticFiles(new StaticFileOptions()
{
OnPrepareResponse = (context) =>
{
context.Context.User.Identity.IsAuthenticated
&& context.Context.Request.Path.StartsWithSegments("/excelfiles"))
{
throw new Exception("Not authenticated");
}
}
});
C'est un exemple très simple, mais il peut être modifié pour vérifier des rôles spécifiques et le code peut être déplacé hors de Startup.cs pour plus de flexibilité.
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated
&& context.Request.Path.StartsWithSegments("/excelfiles"))
{
throw new Exception("Not authenticated");
}
await next.Invoke();
});
Si vous avez un formulaire de connexion (Login.html), une solution simple consiste à rediriger l'utilisateur vers la page de connexion si l'utilisateur n'est pas authentifié et demande une ressource protégée (fichier sous/dossier protégé). Dans Startup.cs, dans la méthode Configure, insérez ce code:
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated && context.Request.Path.StartsWithSegments("/protected"))
{
context.Response.Redirect("/Login.html");
return;
}
await next.Invoke();
});