首页 > 解决方案 > 加载嵌入式 css 和图像以供未经授权的用户访问时出现问题

问题描述

我在具有 web.config 文件的 asp.net 应用程序中托管了 angularjs 应用程序。我正在使用 ADFS 在此应用程序中实现身份验证和自定义授权。

angularjs 应用程序有文件夹:assets,其中包含所有静态内容,如 css、js、img、字体。还有另一个文件夹错误,其中包含相应错误的 html 页面。auth.html 是位于错误文件夹中的页面。

在 web.config 文件级别,我有以下设置:

<location path="errors/auth.html">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
  </location>
  <location path="assets/css">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
    <!-- Add Caching Support for contents within folder: assets-->
    <system.webServer>
      <!--Caching-->
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
      </staticContent>
    </system.webServer>
  </location>
  <location path="assets/fonts">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
    <!-- Add Caching Support for contents within folder: assets-->
    <system.webServer>
      <!--Caching-->
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
      </staticContent>
    </system.webServer>
  </location>
  <location path="assets/img">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>
    <!-- Add Caching Support for contents within folder: assets-->
    <system.webServer>
      <!--Caching-->
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
      </staticContent>
    </system.webServer>
  </location>
  <location path="assets/js">
    <!-- Add Caching Support for contents within folder: assets-->
    <system.webServer>
      <!--Caching-->
      <staticContent>
        <clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365.00:00:00" />
      </staticContent>
    </system.webServer>
  </location>

我在 IIS 中托管了应用程序,版本为:IIS 版本:10.0.17763.1,文件夹名称为 testapp,在 wwwroot 文件夹中创建。

每当任何未经授权的用户尝试打开应用程序时,我都需要显示包含未经授权的消息详细信息的 auth.html 页面。

在与未经授权的用户进行验证时,我看到没有 css 和图像呈现的 html 页面。即使 auth.html 具有指向 css 和图像的链接,但它们没有被渲染。

auth.html:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>Test Application</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" type="image/x-icon" href="/assets/img/favicon.ico">
  <!-- inject:css -->
  <link rel="stylesheet" href="/assets/css/app.css">
  <!-- endinject -->
</head>

<header id="main-header" class="navbar navbar-fixed-top error-page-header" role="navigation">
  <div class="container-fluid">
    <div class="navbar-header">
      <div class="navbar-brand">
        <img src="/assets/img/logo-test.svg" width="92">
      </div>
    </div>
    <nav role="navigation">
      <ul class="nav navbar-nav navbar-left">
        <li>
          <a>Test Application</a>
        </li>
      </ul>
      <ul class="nav navbar-nav navbar-right">

      </ul>
    </nav>
  </div>
</header>

<body>
  <div class="error-page">
    <h2> You are not authorized to access Test Application.</h2>    
  </div>
</body>

</html> 

全球.asax.cs

protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
    {
        if (Thread.CurrentPrincipal.Identity.IsAuthenticated && Thread.CurrentPrincipal is IClaimsPrincipal)
        {
            if (!((IClaimsPrincipal)Thread.CurrentPrincipal).Identities[0].Claims.Exists(c => c.ClaimType == "TestApp_UserAuthorized") || !Convert.ToBoolean(((IClaimsPrincipal)Thread.CurrentPrincipal).Identities[0].Claims.Single(c => c.ClaimType == "TestApp_UserAuthorized").Value))
            {
                //Avoid Redirection for static files (used in Access denied page)
                List<string> staticcontentpaths = new List<string>{".css", ".js", ".png", ".gif", ".jpg", ".jpeg", ".ico", ".svg", ".woff", ".ttf"};
                string extension = Path.GetExtension(HttpContext.Current.Request.PhysicalPath).ToLower();
                if (!staticcontentpaths.Contains(extension))
                {
                    Server.Execute("~/errors/auth.html");
                    HttpContext.Current.ApplicationInstance.CompleteRequest();
                }
            }
        }
    }

任何人都可以通过提供解决此问题的指导来帮助我吗

标签: javascriptcssasp.netangularjsiis-10

解决方案


推荐阅读