允许任何用户在没有凭据的情况下使用 cors 访问“signalr/hubs”(服务器运行 Windows 身份验证)

Posted

技术标签:

【中文标题】允许任何用户在没有凭据的情况下使用 cors 访问“signalr/hubs”(服务器运行 Windows 身份验证)【英文标题】:Allow any user to access 'signalr/hubs' without credentials, using cors (server runs windows authentication) 【发布时间】:2016-07-18 00:36:36 【问题描述】:

我有两台服务器

    SignalR 主机(Windows 身份验证、IIS) 网页主机的其余部分(表单身份验证、IIS)

我已经全部设置好了,它可以在 Chrome 中使用 longpolling。 (1) 在使用 Firefox 并导航到https://localhost:44301/signalr/hubs 时询问用户名和密码。

(1) 使用 Windows 身份验证。我试图通过在web.config 中执行以下操作来避免身份验证:

<location path="signalr">
  <system.web>
     <authorization>
        <allow users="*" />
     </authorization>
  </system.web>
</location>

但 SignalR 不是路径,因为它是自动生成的。 我也尝试这样做以暴露集线器,但无济于事:

<location path="~/Hubs">
  <system.web>
     <authorization>
        <allow users="*" />
     </authorization>
  </system.web>
</location>

谁能帮我找到从https://localhost:12321/signalr/* 中删除身份验证的方法? (这也包括所有信号/协商调用 ++)

【问题讨论】:

【参考方案1】:

试试

<allow users="?"/> 

因为它允许匿名,使用 asterix "*" 您允许“所有用户”。

【讨论】:

我当然会想象“所有用户”也包括“匿名”用户......但是问题不是吗?或*,这是“位置路径”不存在的事实.. 标题说删除身份验证,我脑子里最快的事情就是允许匿名。 @BjørnØyvindHalvorsen 简而言之,答案就是我写的作为对原始问题的回答:) 很高兴你把它整理好了! 原始问题不仅仅是标题...原始问题是问题的标题和正文。如果您阅读了这两篇文章,您就会知道 只是权限的变化,而不是限制因素。 ?比 * 更严格,因此不能解决我的任何问题...... @BjørnØyvindHalvorsen 够公平的。很高兴现在解决了:)!希望它对将来的某些人有用。【参考方案2】:

我通过改变问题的前提解决了这个问题。

现在整个服务器都可以匿名访问了,但是需要windows身份验证的路径已经自己指定了。

需要保护的控制器的示例如下:

<location path="#####.ashx">
<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="false"/>
      <windowsAuthentication enabled="true"/>
    </authentication>
    <authorization>
      <remove users="?" roles="" verbs="" />
      <add accessType="Deny" users="?" />
    </authorization>
  </security>
</system.webServer>
< /location>

以及服务器的一般设置:

  <system.webServer>
    <security>
      <authentication>
        <anonymousAuthentication enabled="true"/>
        <windowsAuthentication enabled="true"/>
      </authentication>
      <authorization>
        <add accessType="Allow" users="?" />
      </authorization>
      <requestFiltering>
        <!--Auction searches with 250 results generates slightly longer string than standard setting of 2048-->
        <requestLimits maxQueryString="3072" />
      </requestFiltering>
    </security>
  </system.webServer>

这对每个人来说可能不是一个可行的解决方案,但它对我有用...... :)


附注:在处理这个问题时,我还与 IIS Express 进行了斗争,并且完全能够在 web.config 中设置 Windows 身份验证。这篇文章对我帮助很大 -> IIS Express Windows Authentication

【讨论】:

以上是关于允许任何用户在没有凭据的情况下使用 cors 访问“signalr/hubs”(服务器运行 Windows 身份验证)的主要内容,如果未能解决你的问题,请参考以下文章

在没有 Windows 访问权限的情况下使用凭据信息访问共享文件夹

如何修复“CORS 协议不允许同时指定通配符(任何)来源和凭据”错误

CORS $.ajax 会话 cookie(访问控制允许凭据和 withCredentials=true)

CORS“允许凭据”Nodejs/Express

访问控制允许凭据错误--nodejs

预检访问控制允许凭据