繁体   English   中英

在 Xamarin/App 中,如何保护来自其他用户和公众的文件夹中 ASP.NET Restful Server 上的文件

[英]in Xamarin/App how do I Secure Files on ASP.NET Restful Server in folders from other users and general public

我有一个使用restful服务器的APP。 我想将 PDF、图像等存储在我服务器上的文件夹中。 如何将服务器上的文件夹设为私有,但允许应用程序根据其应用程序访问权限仅访问某些文件夹。

我在应用程序和安全/令牌中建立了不同的用户,等等。但是如果他们上传他们的头像(现在是 PDF)的图像,它们会存储在服务器上的文件夹中,我只显示图像源 = https:// blahblah.com/org1/images/user232.jpg。

我如何才能使外部无法访问(例如只访问浏览器),但如果他们对该组织/用户具有正确的登录权限,则可以访问应用程序? 然后将该逻辑进一步扩展到更敏感的 PDF 以及通过应用程序上传的其他文档。 我不想在 SQL 中存储,因为那时更难使用简单的图像显示工具,而且我已经有了使用文件夹结构的上传和媒体管理器。

如果通过浏览器(凭据)登录到服务器,我可以看到如何保护,但看不到您如何将应用程序连接到该安全级别并为会话维护它。

对于未来的读者。 大多数工作是在 restful (ASP.NET) 端完成的。 我首先尝试在 web.config 中使用授权/身份验证并允许和拒绝。 这允许将用户重定向到登录页面; 但是,如果他们在网站上输入的图像完全正确,则不会这样做。

找到了 HTTPHandlers(在 webconfig 中添加),我可以在其中编写代码,一旦用户输入特定的图像地址 xyz/abc/image.png 就会执行这些代码。 我发现这有点像黑客。

所以最后修改了我的

    routes.MapRoute(
      name: "staticFileRoute",
      url: "publicstor/{*file}",
      defaults: new { controller = "Home", action = "HandleStatic" }

并将这样的功能添加到家庭控制器。

[System.Web.Http.HttpGet]
public ActionResult HandleStatic(string file)
{
    if (Session["OrgId"] == null) //todo  need to add full security check.  
    {
        return View("Login");
    }
    else  //Either coming from app or coming from web interface
    {
        string mimeType = MimeInfo.GetMimeType(Path.GetExtension(file));

        return File(file, mimeType);
    }
}

最后一点是在 Xamarin 方面,现在在获取图像时通过安全性。 由于只是一个简单的 Xamarin.Forms.Image 没有办法传递登录信息或令牌/身份验证我使用https://forums.xamarin.com/discussion/145575/image-from-url-needing-auth并建立一个应用程序网络客户端,它通常会登录一次,迫使我的 Restful 通过安全验证,然后从该网络客户端通过我的应用程序访问图像/文档。 到现在为止还挺好。 希望没有坑。

这为未来的读者提供了要点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM