问题描述
我在MVC Razor网站和STS服务器上遇到CORS问题。
MVC网站信息:
- Windows Server 2019
- IIS 10.0
- MVC 5
- 剃刀3
常规信息:
通常,当用户导航到我们的MVC网站之一时,他们将被重定向到ADFS STS服务器,以其域登录名登录。成功通过身份验证后,它们将被发送回站点并能够自由导航。一个小时后,下一个返回该站点的请求将短暂地将它们重定向回ADFS服务器,然后返回到其导航到的页面。发生这种情况时不需要他们再次手动登录。
这是ADFS站点URL的开头: https://sts.ourdomain.com/adfs/ls/?wtrealm=stuff_stuff_andmorestuff..。
虽然我遇到的问题是在新的MVC站点上,但在我们的其他两个MVC站点上也存在该问题,这些站点使用相同版本的MVC和Razor,但托管在旧版Windows Server和IIS上。这些站点还使用同一ADFS STS服务器进行AD身份验证。
问题:
如果用户在MVC站点之一上的页面上,则ajax调用通常可以正常工作。但是,如果从检索到最后一个STS令牌起已经过了一个多小时,并且触发了进行Ajax调用的事件触发,则在Ajax调用期间会将重定向重定向到ADFS服务器,这将导致如下CORS错误:
Access to XMLHttpRequest at 'https://sts.ourdomain.com/adfs/ls/?wtrealm=stuff_stuff_andmorestuff...'
(redirected from 'https://OurMVCSite.ourdomain.com/ControllerName/ActionName') from origin
'https://OurMVCSite.ourdomain.com' has been blocked by CORS policy: Response to preflight request doesn't
pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
如果我正确理解了这一点,则由于CORS策略的原因,是ADFS服务器需要在标头中添加例外,以允许MVC网站上的JavaScript从javascript ajax调用重定向到它们。 这正确吗?
另一个部门管理ADFS服务器,因此我想确保在使它们涉及之前需要在其中进行更改。
解决方法
您提出的解决方案也不起作用。即使CORS工作正常,您也不会被重定向。将进行ajax调用,然后您就可以从新页面获取数据作为XHR有效负载。
如果第二次重定向将为您返回正确的数据,此方法将起作用:How to overcome CORS redirect issue while performing post operation via ajax?
有一些解决方法,即此处提到的建议:How to manage a redirect request after a jQuery Ajax call