在Google身份验证后面提供静态文件

时间:2017-10-24 07:15:29

标签: asp.net-core asp.net-core-mvc static-files gatsby

我想使用Gatsby创建一个静态生成的网站。这一切都很好,但我希望有适当的身份验证和授权,因为这是一个内部网站 - 它只能由我公司的人员访问。我想到了这一点,如果没有一些服务器组件,在没有某种后端的情况下安全地验证用户是不可能的(?)。我以为我可以使用ASP.NET Core来提供静态文件,并在这些静态文件前面进行Google(for Work)身份验证和授权。

似乎是StaticFileHandler doesn't support authorization by design,因为它只负责提供可公开访问的静态文件。我设法通过使用我的root操作上的Authorize属性(听取'/')以及发出Challenge的登录操作来启用Google身份验证,并且用户将被重定向到Google认证。进一步阅读处理静态文件的文档说:

  

静态文件模块不提供授权检查。它提供的任何文件,包括wwwroot下的文件都是公开的。根据授权提供文件:

     
      
  • 将它们存储在wwwroot之外以及静态文件中间件和
  • 可访问的任何目录中   
  • 通过控制器操作提供服务,返回应用授权的FileResult
  •   

现在,我的Index上有一个HomeController操作,如下所示:

[Authorize]
public IActionResult Index()
{
    // TODO: Return static files based on incoming requested path.
    return View();
}

我对这个解决方案不太满意。我应该使用中间件而不是使用MVC吗?这甚至是正确的方法吗?有没有更好的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

Gatsby将生成一个静态内容文件夹,该文件夹没有任何授权概念。

我建议您需要在不同的层处理身份验证。例如,您可以在Web服务器层添加简单的基本授权标头要求。这在nginx或apache中是微不足道的。

在您的Gatsby项目中构建身份验证会破坏静态网站的目的,或者意味着您的内容可以作为JSON文件公开访问,但您的React应用程序将拒绝加载它,除非满足某些授权要求(不安全)

答案 1 :(得分:0)

在工作中,我们有一个通过VPN服务的Gatsby网站。它运行良好,不需要任何身份验证系统和后端。您只需要禁止不在VPN内的用户访问服务器。

您可以使用https://github.com/gatsbyjs/gatsby-docker与Nginx一起提供盖茨比服务。