我有一个受OAuth 2授权代码流保护的后端应用程序。前端(浏览器中的javascript)命中后端的授权端点,后端将浏览器重定向到授权代码服务器,用户进行身份验证,然后授权服务器使用授权代码将浏览器重定向回后端后端赎回一个令牌来访问某些服务。
问题是这些重定向都是连续发生的,浏览器中的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。该 请求被重定向到 &#39; http://autho.com/auth?response_type=code&redirect_uri=http://app.com/autho&state=639bfbe7-fd20-4c04-8feb-c9f60f4d55a9&client_id=0xdeadbeef&#39 ;, 这对于需要预检的跨源请求是不允许的。
EDIT2:因此重定向工作正常,没有Authorization
标头。猜猜现在数据正在进行中。
答案 0 :(得分:5)
这对我来说似乎不正确的是你正在尝试使用JavaScript的重定向协议流程。
通常,您的浏览器会被重定向到授权服务器,并且在成功进行身份验证后,浏览器会使用身份验证代码或访问令牌重定向回应用程序(具体取决于使用的流量)。
在这种情况下,您不是在使用JavaScript与授权服务器通信,因此不会考虑交叉起源注意事项。
如果您想从JavaScript客户端使用OAuth2,我建议您查看implicit grant,这是为不受信任的客户端(如JavaScript应用程序)设计的重定向流程。