Javascript CORS和OAuth 2授权代码流

Javascript CORS和OAuth 2授权代码流,javascript,authentication,redirect,oauth-2.0,cors,Javascript,Authentication,Redirect,Oauth 2.0,Cors,我有一个后端应用程序,它受到OAuth 2授权代码流的保护。前端(浏览器中的javascript)点击后端的授权端点,后端将浏览器重定向到授权代码服务器,用户进行身份验证,然后授权服务器使用授权代码将浏览器重定向回后端,后端将该授权代码兑换为令牌以访问某些服务 问题是这些重定向都是连续发生的,浏览器中的COR阻止了交换。就CORS而言,服务器需要做什么才能使此流程正常工作 browser -> POST app.com/aut

我有一个后端应用程序,它受到OAuth 2授权代码流的保护。前端(浏览器中的javascript)点击后端的授权端点,后端将浏览器重定向到授权代码服务器,用户进行身份验证,然后授权服务器使用授权代码将浏览器重定向回后端,后端将该授权代码兑换为令牌以访问某些服务

问题是这些重定向都是连续发生的,浏览器中的COR阻止了交换。就CORS而言,服务器需要做什么才能使此流程正常工作

browser                                 -> POST app.com/auth
307 auth.com/auth?redirect=app.com/auth <-
browser                                 -> POST auth.com/auth?redirect=app.com/auth (with authorization header)
307 app.com/auth?authcode=fubar         <-
browser                                 -> POST app.com/auth?authcode=fubar
browser->POST-app.com/auth
307 auth.com/auth?redirect=app.com/auth POST auth.com/auth?redirect=app.com/auth(带授权头)
307 app.com/auth?authcode=fubar POST app.com/auth?authcode=fubar
大概就是它应该如何发展的

编辑: 浏览器说

无法加载XMLHttpRequest。这个 请求已重定向到 '', 这是不允许的跨来源请求,需要飞行前


EDIT2:因此重定向在没有
授权的情况下可以正常工作。我猜现在数据已经进入正文了。

我觉得这里不正确的地方是,您试图使用来自JavaScript的重定向协议流

通常,您的浏览器会重定向到授权服务器,并且在成功进行身份验证后,浏览器会使用身份验证代码或访问令牌重定向回应用程序(取决于所使用的流)

在这种情况下,您不是从JavaScript与授权服务器进行对话,因此跨源考虑不起作用


如果您想从JavaScript客户端使用OAuth2,我建议您查看,这是一个重定向流,专为不受信任的客户端(如JavaScript应用程序)设计。

您可以共享CORS错误吗?您应该确保后端允许飞行前选项请求,这些请求在POST请求之前发送。@mcranston18这些请求已启用,我只是不确定他们到底应该返回什么。除了允许的主机之外,是否还应显式返回所有方法和标头?是否还有其他需要返回的东西来启用重定向?有趣的是,如果重定向和参数传递都是从HTML CORS完成的,那么就不会起作用了?我不使用隐式授权,因为它不是javascript应用程序需要令牌(已在其他地方处理),它是后端应用程序需要令牌来访问其他应用程序/服务。对于隐式授权,这些重定向也不会跟随javascript正确吗,同源策略适用于从域A加载的脚本,对域B进行API调用。如果您的后端应用程序是受信任的客户端,您可以使用授权代码授权,但您的浏览器仍将导航到授权服务器进行身份验证。隐式授权也是如此。不再建议使用隐式授权。我认为问题在于授权页面是否必须在服务器端呈现。