2016-08-23 33 views
1

方案

IIS Webserver。 不是.Net Webservice。 发布到Webservice。CORS PreFlight未发送凭证,服务器要拒绝未认证的用户

.NET Web应用程序连接在一个横结构域方式的web服务。

要求

Web服务器需要需要与单点登录身份验证的Active Directory用户。

它是可以接受的飞行前OPTIONS测试接受验证的请求,但任何其他请求(包括OPTIONS试验后的POST)必须要求身份验证的用户。

我在哪里:

我有一个成功的CORS跨域调用的Web应用程序和Web服务器之间的工作。我可以清楚地看到OPTIONS调用工作,然后后续POST调用工作。

问题:

OPTIONS调用不发送凭证。为了解决这个问题,我们允许匿名用户在网站级别。否则,我们会收到401未经授权的错误。

然而,一旦我们做到这一点,POST不再需要验证。事实上,Web服务器日志显示证书根本不在邮件中发送。这是不可接受的。

我需要一种方法是(a)强制选项调用发送Active Directory凭据或(b)Web服务器必须拒绝所有未验证非OPTIONS请求。

首:

对于解决途径(一),我对自己这需要相当的比赛。

对于溶液路径(B),更希望的IIS设置或web.config中设置。网络服务器是用python编写的,但我想我们可以创建一个c#web服务器代码单元,它将调用在服务器上执行真正工作的python代码。

想法?

回答

1

理由是问题的要求:

我需要一种方法是(a)强制选项调用发送Active Directory凭据或(b)Web服务器必须拒绝所有unauthenticaed非OPTIONS请求。

无法强制浏览器在OPTIONS调用中发送凭据。浏览器需要省略所有OPTIONS飞行前请求中的凭证。

参见抓取规范的CORS-preflight fetch部分,它说该算法的第一步骤:

要执行使用请求的CORS-预检取,执行这些步骤:

  1. 让预检是一个新的request方法OPTIONSURL被请求的当前的URL,引发剂是请求的initi ATOR,是请求的类型,目的地是请求的目的地,起源是请求的起源,引用是请求的引荐,和引荐政策是请求的引荐政策。

request还携带credentials mode

的请求具有相关联的凭证模式,这是 “omit”, “same-origin” 或 “include”。除非另有说明,否则为“omit”。

由于上面提到的CORS飞行前的算法的第一步指定为OPTIONS要求的凭证模式没有价值,浏览器必须使用这些请求的默认“omit”。

鉴于此,你不会找到任何方法在客户端(浏览器)端解决这个问题,所以我想你只需要在服务器端修复它。

+0

谢谢。我读过的一些CORS文章说,这些凭证没有在“默认”选项请求上发送,这意味着它们可以发送。 有没有办法将IIS配置为只接受匿名选项请求,但需要其他任何凭据? 我们发现获得选项的唯一方法就是停止凭据在帖子上发送。 –

+0

对不起,我对配置IIS一无所知。我回答说只是明确表示无法从客户端解决此问题。 – sideshowbarker

0

这不是我要求的答案,但它可以解决一些人的问题。

如果您受到CORS的攻击,并且您只是在尝试执行Intranet应用程序,则可以将CORS关闭。

可以设置组策略来这样做。

Computer Configuration 
-> Administrative Templates 
    -> Windows Components 
     -> Internet Explorer 
     -> Internet Control Panel 
      -> Security Page 
       -> Intranet Zone (and/or Trusted Sites Zone, depending) 
        -> Access data sources across domains 
         (set to Enabled.) 

你需要做的设置策略,确保它得到当地箱等我不精明足够的细节来写的那部分了的系统管理员任务。抱歉。

相关问题