【问题标题】:IIS website works with localhost, but not using an IP addressIIS 网站使用本地主机,但不使用 IP 地址
【发布时间】:2023-02-04 01:22:04
【问题描述】:

我有一个带有 .NET 框架后端的 Angular 前端,它具有以下 web.config 文件(没有其他关于授权/身份验证的信息):

<location path="Tokens">
  <system.webServer>
    <security>
        <authentication>
            <windowsAuthentication enabled="true" />
            <anonymousAuthentication enabled="false" />
        </authentication>
    </security>
  </system.webServer>
</location>
<system.webServer>
  <security>
      <authentication>
          <windowsAuthentication enabled="false" />
          <anonymousAuthentication enabled="true" />
      </authentication>
  </security>
</system.webServer>

我正在使用 AD 登录,这是 Tokens 控制器,其余部分由 JWT 令牌保护。

我目前的问题是,我希望使用 IIS 与域中的其他计算机一起测试该网站,如果我使用 localhost,该网站可以正常工作,但是一旦我使用我的 IP,错误就会开始出现。

我的前端配置 JSON:

{
  ...
  "apiAddress": "https://IP:50505/",
  ...
}

后端web.config 也包含这个:

<add key="WhitelistedServerUrls" value="https://IP:34622" />

因此,如果配置文件中的 IP 是 localhost,那么一切都会正常运行,但如果我将其换成我的实际 IP,则会出现 CORS 错误,如下图所示:

如果我使用本地主机,这些错误都不会出现。以下是我尝试过的事情的列表:

  • CORS 应该在代码中正确设置,但为了确保,我还在 IIS 的 HTTP Response Headers 功能中配置了它
    • 这修复了 CORS 错误,但带来了不同的错误,信号器也有一个错误,即 CORS 来源被设置了两次
  • 我还在设置中将网站https://IP 添加到本地 Intranet
    • 在此之前,我收到一个登录弹出窗口,这样做修复了它
  • 我对前端和后端的绑定都是带有自签名证书的 https
    • 浏览器通知,证书无效

我的猜测是我的 IIS 配置不正确,因为如果我使用 localhost 而不是 IP 地址,网站就可以正常工作。

【问题讨论】:

  • 在后端,您是否将真实IP地址添加到cors配置中? builder.Services.AddCors(o =&gt; o.AddPolicy("AllowAll", build =&gt; { build .WithOrigins("actual IP adress").AllowCredentials(); }));
  • @B_Cbk 这是我的 CORS 配置:var cors = new EnableCorsAttribute(SystemConfiguration.GetValueFromConfigSection("Authorization", "WhitelistedServerUrls"), "*", "*") { SupportsCredentials = true}; config.EnableCors(cors); 它从 web.config 文件中读取实际 IP
  • 你有这个定义吗<系统.web服务器>在您的网络配置文件中标记?您的 Cors 配置看起来正确。 &lt;httpProtocol&gt; &lt;customHeaders&gt; &lt;add name="Access-Control-Allow-Origin" value="*" /&gt; &lt;/customHeaders&gt; &lt;/httpProtocol&gt;
  • 您确定可以读取 web.config 文件中的 ip 地址吗?
  • @B_Cbk 我没有,它应该没有那个或没有?因为我在代码中配置了 CORS。

标签: c# .net angular iis active-directory


【解决方案1】:

您启用了 Windows 身份验证,以便当浏览器发送的 CORS 预检请求(匿名 OPTION 请求)到达 IIS 时,IIS 返回 401 并触发您看到的错误。

您将不得不使用 IIS CORS 模块来正确处理此类预检请求,

https://blogs.iis.net/iisteam/getting-started-with-the-iis-cors-module

【讨论】:

    猜你喜欢
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 1970-01-01
    • 2016-08-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    相关资源
    最近更新 更多