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

And*_*aas 5 static-files asp.net-core-mvc asp.net-core gatsby

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

看起来StaticFileHandler 它不支持设计授权,因为它只负责提供可公开访问的静态文件.我设法通过使用Authorize我的root操作上的属性(听取'/')来获得Google身份验证,并且具有发布的登录操作,Challenge并且用户将被重定向到Google进行身份验证.进一步阅读处理静态文件的文档说:

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

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

所以现在我Index对我的动作HomeController看起来像这样:

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

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

chm*_*mac 0

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

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

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