场景
IIS IIS服务器。不是.Net网络服务。POSTing到Webservice。
以跨域方式连接到.Net服务的web应用程序。
要求
with服务器需要使用经过身份验证的active directory用户进行单点登录。
飞行前OPTIONS测试接受经过身份验证的请求是可以接受的,但任何其他请求(包括OPTIONS测试后的POST )必须需要经过身份验证的用户。
我所处的位置:
我有一个成功的CORS跨域调用在web应用程序和web服务器之间工作。我可以清楚地看到选项呼叫工作,然后是后续的呼叫工作。
问题:
OPTIONS调用不发送凭据。为了解决这个问题,我们允许网站级别的匿名用户。否则,我们会得到一个401未经授权的错误。
然而,一旦我们这样做了,帖子就不再需要身份验证了。事实上,all服务器日志显示证书根本不会在post中发送。这是不可接受的。
我需要一种方法来(a)强制OPTIONS调用发送Active Directory凭据,或者(b) way服务器必须拒绝所有未经身份验证的非OPTIONS请求。
首选项:
对于解决方案路径(a),我完全满足它的要求。
对于解决方案路径(b),首选IIS设置或web.config设置。we服务器是用python编写的,但我想我们可以创建一个c# we服务器代码单元,它将调用在服务器上执行实际工作的python代码。
想法?
发布于 2016-08-24 11:09:31
引用问题中的要求:
我需要一种方法来(a)强制OPTIONS调用发送Active Directory凭据,或者(b) way服务器必须拒绝所有未经验证的非OPTIONS请求。
没有办法强制浏览器在OPTIONS调用中发送凭据。浏览器需要在所有OPTIONS印前检查请求中省略凭据。
请参阅Fetch规范的CORS-preflight fetch部分中的算法的第一步,其中说:
要使用请求执行CORS-印前检查获取,请运行以下步骤:
request,其方法是OPTIONS,url是请求的当前url,发起人是请求的发起人,类型是请求的类型,目的地是请求的目的地,来源是请求的来源,引用人是请求的引用人,引用人策略是请求的引用人策略。每个request还带有一个credentials mode
请求具有关联的凭据模式,该模式为"
omit“、"same-origin”或"include“。除非另有说明,否则它是"omit“。
因为上面引用的CORS印前检查算法的第一步没有为OPTIONS请求的凭证模式指定任何值,所以浏览器必须对这些请求使用默认的"omit“。
鉴于此,您将无法在客户端(浏览器)找到任何方法来解决此问题,所以我猜您需要在服务器端修复它。
发布于 2016-08-24 22:45:22
这不是我想要的答案,但对于一些人来说,这是一个可以解决问题的答案。
如果你正在遭受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.)你需要做系统管理员的任务,设置策略,确保它到达本地机器,等等。我对细节不够精通,无法写出这一部分。抱歉的。
https://stackoverflow.com/questions/39109446
复制相似问题