IIS Webserver。 不是.Net Webservice。 发布到Webservice。
.Net网络应用程序以跨域方式连接到Webservice。
Webserver需要通过单点登录来验证经过身份验证的Active Directory用户。
飞行前OPTIONS测试接受经过身份验证的请求是可以接受的,但任何其他请求(包括OPTIONS测试后的POST)都必须要求经过身份验证的用户。
我在Web应用程序和Web服务器之间进行了成功的CORS跨域调用。我可以清楚地看到OPTIONS调用工作,然后后续POST调用工作。
OPTIONS调用不会发送凭据。为了解决这个问题,我们允许网站级别的匿名用户。否则,我们会收到401 Unauthorized错误。
但是,一旦我们这样做,POST不再需要身份验证。实际上,Web服务器日志显示根本不在帖子中发送凭据。这是不可接受的。
我需要一种方法来(a)强制OPTIONS调用发送Active Directory凭据,或者(b)网络服务器必须拒绝所有未经身份验证的非OPTIONS请求。
设定:
对于解决方案路径(a),我可以根据需要进行游戏。
对于解决方案路径(b),更喜欢IIS设置或web.config设置。 Web服务器是用python编写的,但我想我们可以创建一个c#webserver代码单元来调用在服务器上真正工作的python代码。
想法?
答案 0 :(得分:1)
引用问题中的要求:
我需要一种方法来(a)强制OPTIONS调用发送Active Directory凭据,或者(b)网络服务器必须拒绝所有未经通知的非OPTIONS请求。
无法强制浏览器在OPTIONS
调用中发送凭据。浏览器需要在所有OPTIONS
预检请求中省略凭据。
请参阅Fetch规范的CORS-preflight fetch部分中的算法的第一步,该部分说明:
要使用请求执行CORS预检获取,请执行以下步骤:
- 让预检成为新的
醇>request
,其方法为OPTIONS
, url 是请求的当前网址,发起人是请求的发起方,类型是请求的类型,目标是请求的目标,来源是请求的来源,推荐人是请求的推荐人,而推荐人政策是请求的推荐人政策。
每个request
也带有credentials mode:
请求具有关联的凭据模式,即"
omit
","same-origin
"或者& #34;include
&#34 ;.除非另有说明,否则它是"omit
"。
由于上面引用的CORS预检算法的第一步没有为OPTIONS
请求的凭据模式指定任何值,因此浏览器必须使用默认的" omit
"对于那些要求。
鉴于此,你不会在客户端(浏览器)方面找到任何解决方法,所以我猜你需要在服务器端修复它。
答案 1 :(得分:0)
这不是我要求的答案,但这是一个可以解决一些人的问题的答案。
如果您受到CORS的打击,并且您只是尝试进行内部网应用程序,则可以关闭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.)
您需要执行设置策略的sys管理任务,确保它到达本地框等等。我对于编写该部分的细节不够精明。遗憾。