CORS PreFlight不发送凭据,服务器想要拒绝未经身份验证的用户

问题描述 投票:1回答:2

Scenario

IIS Web服务器。不是.Net Webservice。发布到Web服务。

.Net Web应用程序以跨域方式连接到Webservice。

Requirement

Web Server需要使用单点登录来验证活动目录用户。

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

Where I'm at:

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

Problem:

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

但是,一旦我们这样做,POST不再需要身份验证。实际上,Web服务器日志显示根本不在帖子中发送凭据。这是不可接受的。

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

喜好:

对于解决方案路径(a),我很满意它所需的游戏。

对于解决方案路径(b),更喜欢IIS设置或web.config设置。 Web服务器是用python编写的,但我想我们可以创建一个c#webserver代码单元,它可以调用python代码来完成服务器上的实际工作。

想法?

cors preflight
2个回答
1
投票

引用问题中的要求:

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

没有办法强制浏览器在OPTIONS调用中发送凭据。浏览器需要在所有OPTIONS预检请求中省略凭据。

请参阅Fetch规范的CORS-preflight fetch部分中算法的第一步,其中说:

要使用请求执行CORS预检获取,请运行以下步骤:

  1. 让预检是一个新的request,其方法是OPTIONS,url是请求的当前url,发起者是请求的发起者,type是请求的类型,destination是请求的目的地,origin是请求的origin,referrer是request的referrer,referrer policy是request的referrer策略。

每个request也带有credentials mode

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

由于上面引用的CORS预检算法的第一步没有为OPTIONS请求的凭证模式指定任何值,因此浏览器必须对这些请求使用默认的“omit”。

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


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管理任务,确保它到达本地框等。我不够精确地编写该部分的详细信息。抱歉。

© www.soinside.com 2019 - 2024. All rights reserved.