2017-06-08 66 views
1

所以我試圖實現OAuth 2流程,而我的webapp是放棄授權代碼/訪問令牌的服務器。OAuth中的CORS:對預檢請求的響應未通過訪問控制檢查

的XMLHttpRequest無法加載https://zapier.com/dashboard/auth/oauth/return/App505CLIAPI/?code=somecode&state=somestate:發送時的代碼回第三方網站(在這種情況下zapier)發生

一個Cors錯誤。對預檢請求的響應不會通過訪問控制檢查:請求的資源上不存在「訪問控制 - 允許來源」標頭。因此不允許訪問原產地'https://myurl'。

如果我手動打開一個新選項卡,粘貼該zapier uri,一切正常。

似乎是一個典型的CORS的問題,但沒有一個流行的解決方案爲我工作:

  1. 添加Access-Control-Allow-Origin:我使用這個oauth2orize 庫和發送效應初探預檢也似乎 庫的一部分。所以我不能添加標題。
  2. 使用cors:已嘗試app.use(cors())app.options('*', cors())這應該適用於所有路線,但根本不工作。

我的web應用程序坐在一個節點快遞服務器上,前面有一個nginx代理服務器。

任何想法問題可能會被讚賞。

回答

1

錯誤消息指示的問題不是由運行在https://myurl/的應用程序代碼引起的。相反,它只是https://zapier.com/dashboard/auth/…似乎不支持CORS。

具體而言,來自https://zapier.com/dashboard/auth/… URL的響應不包含Access-Control-Allow-Origin響應標頭,因此您的瀏覽器不會讓您的前端JavaScript代碼訪問響應。

看起來這是Zapier方面的所有意圖 - 他們不打算從在瀏覽器中運行的前端AJAX/XHR /獲取代碼訪問auth端點。相反,我猜想你只能從你的後端代碼訪問這個auth端點。或者其他的東西。

無論如何,從您的方面來說,您無法解決來自該Zapier API端點的響應不包括Access-Control-Allow-Origin的事實。

只要它不包含Access-Control-Allow-Origin,您的瀏覽器將繼續阻止您的前端代碼無法訪問響應,而且只要您的前端代碼嘗試了,就無法讓瀏覽器執行其他操作直接擊中該API端點。

所以唯一的解決方案是不直接從你的前端代碼直接命中該API端點,而是設置一個代理並改變你的前端代碼以通過該請求發出請求,否則就以其他方式處理它您現有的後端代碼,如上所述。

"No 'Access-Control-Allow-Origin' header is present on the requested resource"的答案給出了一些關於如何設置特殊的CORS代理的細節,如果你想要去那條路線。

相關問題