【发布时间】:2015-12-16 18:51:44
【问题描述】:
我有一个受 OAuth 2 授权代码流保护的后端应用程序。前端(浏览器中的javascript)命中后端的授权端点,后端将浏览器重定向到授权代码服务器,用户进行身份验证,然后授权服务器使用授权代码将浏览器重定向回后端后端兑换令牌以访问某些服务。
问题是这些重定向都是连续发生的,浏览器中的 CORS 阻止了交换。就 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
大致是这样的。
编辑: 浏览器说
XMLHttpRequest 无法加载 http://app.com/autho。这 请求被重定向到 'http://autho.com/auth?response_type=code&redirect_uri=http://app.com/autho&state=639bfbe7-fd20-4c04-8feb-c9f60f4d55a9&client_id=0xdeadbeef', 对于需要预检的跨域请求,这是不允许的。
EDIT2:所以重定向可以在没有Authorization 标头的情况下正常工作。猜猜数据现在正在进入正文中。
【问题讨论】:
-
您能分享一下 CORS 错误吗?
-
您应该确保您的后端允许预检 OPTIONS 请求,这些请求在您的 POST 请求之前发送。
-
@mcranston18 这些已启用,我只是不确定他们应该返回什么。除了允许的主机之外,是否应该显式返回所有方法和标头?是否需要返回其他内容才能启用重定向?
标签: javascript authentication redirect oauth-2.0 cors