5

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

似乎StaticFileHandler 不支持设计授权,因为它只负责提供可公开访问的静态文件。我设法通过使用Authorize我的根操作(侦听“/”)上的属性来使 Google 身份验证正常工作,并且具有发出 a 的登录操作,Challenge并且用户将被重定向到 Google 进行身份验证。进一步阅读处理静态文件的文档说:

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

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

所以现在我有一个Index动作HomeController,看起来像这样:

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

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

4

2 回答 2

0

Gatsby 会生成一个静态内容的文件夹,里面没有任何授权的概念。

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

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

于 2018-02-19T15:24:55.787 回答
0

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

您可以使用https://github.com/gatsbyjs/gatsby-docker使用 nginx 为 gatsby 提供服务。

于 2019-05-17T15:01:16.183 回答