我想使用Gatsby创建一个静态生成的站点。这一切都很好,但我希望有适当的身份验证和授权,因为这是一个内部网站——它应该只有我公司的人才能访问。我考虑过这一点,如果没有一些服务器组件,就不可能(?)在没有某种后端的情况下安全地对用户进行身份验证。我想我可以使用ASP.NET Core来提供静态文件,并在这些静态文件之前进行Google(for Work)身份验证和授权。
StaticFileHandler
似乎不支持设计授权,因为它只负责提供可公开访问的静态文件。我通过在根操作上使用Authorize
属性(监听"/"),并通过发出Challenge
的登录操作,将用户重定向到谷歌进行身份验证,从而使谷歌身份验证正常工作。进一步阅读处理静态文件的文档中说:
静态文件模块不提供授权检查。它提供的任何文件,包括wwwroot下的文件,都是公开的。根据授权提供文件:
- 将它们存储在wwwroot和静态文件中间件可访问的任何目录之外
- 通过控制器操作为它们提供服务,返回应用授权的FileResult
所以现在我在HomeController
上有一个Index
操作,看起来像这样:
[Authorize]
public IActionResult Index()
{
// TODO: Return static files based on incoming requested path.
return View();
}
我对这个解决方案不太满意。我应该使用中间件而不是MVC来完成整个工作吗?这样做对吗?有更好的方法吗?
Gatsby将生成一个静态内容文件夹,该文件夹没有任何授权概念。
我建议您需要在不同的层处理身份验证。例如,您可以在Web服务器层添加一个简单的基本授权标头要求。这在nginx或apache中是微不足道的。
在Gatsby项目中构建身份验证要么会破坏静态网站的目的,要么意味着您的内容可以作为JSON文件公开访问,但您的React应用程序将拒绝加载它,除非满足某些授权要求(不安全)。
在工作中,我们有一个通过VPN提供服务的盖茨比网站。它运行良好,不需要任何身份验证系统和后端。您只需要禁止不在VPN内的用户访问服务器。
您可以使用https://github.com/gatsbyjs/gatsby-docker为盖茨比配上nginx。