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

问题描述

我有一个使用宁静服务器的APP。我想将PDF,图像等存储在服务器上的文件夹中。如何在服务器上将文件夹设为私有,但允许App仅访问某些文件夹,具体取决于它们对应用程序的访问权限。

我在应用程序中拥有不同的用户,并建立了安全性/令牌,等等。但是,如果他们上载化身的图像(现在是PDF),则将它们存储在服务器上的文件夹中,而我只显示了图像source = https ://blahblah.com/org1/images/user232.jpg。

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

如果通过浏览器(凭证)登录服务器,我可以看到如何确保安全,但是看不到如何将App与该安全级别连接并为会话维护它。

解决方法

供将来的读者使用。大多数工作是在宁静(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 并建立了一个应用程序范围的Web客户端,该客户端通常登录一次,迫使我的RESTful通过安全验证,然后才从该Web客户端通过我的应用程序访问图像/文档。到现在为止还挺好。希望没有孔。

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