通过跨源重定向透明移动启用CORS的资源

通过跨源重定向透明移动启用CORS的资源,cors,fetch-api,Cors,Fetch Api,我想访问受运行在不同域上的CAS保护的REST服务。这意味着我需要向CAS登录端点发出请求,并让它将我重定向到目标服务。关于CORS重定向失败的原因,这里有几十个问题,但我还没有找到任何关于如何真正使其工作的答案 我找到了一些关于这个主题的专门旁白: 要使通过简单请求访问的支持CORS的资源的透明移动成为可能,需要服务器进行工作和协调。例如,位于的资源可能使用credentals响应CORS请求,并重定向到。。。它将携带访问URL参数中的资源的权限,而不是Cookie和Origin头。位于的服务

我想访问受运行在不同域上的CAS保护的REST服务。这意味着我需要向CAS登录端点发出请求,并让它将我重定向到目标服务。关于CORS重定向失败的原因,这里有几十个问题,但我还没有找到任何关于如何真正使其工作的答案

我找到了一些关于这个主题的专门旁白:

要使通过简单请求访问的支持CORS的资源的透明移动成为可能,需要服务器进行工作和协调。例如,位于的资源可能使用credentals响应CORS请求,并重定向到。。。它将携带访问URL参数中的资源的权限,而不是Cookie和Origin头。位于的服务器需要自定义逻辑来识别和验证这些参数,并在将访问控制允许标头返回给用户代理之前执行适当的授权

我控制这两个服务的容器以及客户端代码,所以我应该能够做到这一点(对吗?),但我认为文档中描述的内容实际上是不可能的。登录端点已经能够使用一次性凭证令牌重定向(CAS就是这样工作的),因此应该很容易

如本文所述,应该使用凭据请求重定向程序(
old.example.com
)。但是,如果我调用
fetch(url,{credentials:{include})
,那么在执行重定向时也会包括凭据(
new.example.com
,在上面的例子中)。因为我告诉
fetch
要包含凭据,浏览器加载的最终URL必须发送匹配的ACA Origin头,但因为它是重定向的目标,第二个请求的源将是
null


要使W3C建议的工作流成为可能,我需要能够告诉浏览器将凭据发送到
old.example.com
,但一旦它将您重定向到
new.example.com
,请在无凭据/无cors模式下请求它。据我所知,这是不可能的——初始请求和所有后续重定向获得相同的获取选项。我错过什么了吗?还有其他方法可以做到这一点吗?

你没有遗漏任何东西。如果不想在新位置上允许认证请求,则需要更新所有呼叫者。

也许我不清楚:我只是想按照W3C文章的建议,让“旧”服务通过cookie进行身份验证,“新”服务通过查询参数令牌进行身份验证。我不知道如何在一个
fetch
调用中同时完成这两件事。一个更明确的例子会有帮助吗;你说得对,这是不可能的。如果
new.example.com
一开始没有得到任何cookie,则会出现排序异常。浏览器仍然可以发出“认证”请求,但它们不会包含任何cookie。服务器仍然必须像发出认证请求一样进行响应。因此,W3C指南是错误的,他们建议的解决这一需求的方法(“支持CORS的资源的透明移动”)在当前的web上实际上是不可能的?我是唯一一个尝试使用跨源CAS或其他东西的人吗?我觉得我必须错过一些重要的东西,但就我的一生而言,我不知道它是什么。另外:我认为我不理解您在本文中所说的“更新所有呼叫者”是什么意思,因为这是一个(自动地,超出我的控制)遵循服务器重定向的调用。