我想使用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吗?这甚至是正确的方法吗?有没有更好的方法来做到这一点?
答案 0 :(得分:0)
Gatsby将生成一个静态内容文件夹,该文件夹没有任何授权概念。
我建议您需要在不同的层处理身份验证。例如,您可以在Web服务器层添加简单的基本授权标头要求。这在nginx或apache中是微不足道的。
在您的Gatsby项目中构建身份验证会破坏静态网站的目的,或者意味着您的内容可以作为JSON文件公开访问,但您的React应用程序将拒绝加载它,除非满足某些授权要求(不安全)
答案 1 :(得分:0)
在工作中,我们有一个通过VPN服务的Gatsby网站。它运行良好,不需要任何身份验证系统和后端。您只需要禁止不在VPN内的用户访问服务器。
您可以使用https://github.com/gatsbyjs/gatsby-docker与Nginx一起提供盖茨比服务。