簡體   English   中英

瀏覽器不遵循來自 AJAX 響應的重定向(PHP 生成的響應使用 CAS 身份驗證)

[英]Browser doesn't follow redirect from an AJAX response (PHP-generated response is using CAS authentication)

好的,看來我在最初的問題上犯了一個錯誤。 所以,這里有一些更正。 答案仍然適用,因為當協議更改為 HTTPS (SSL) 時,第二次重定向將停止。

就我而言,我的重定向發生了多次,並且瀏覽器不遵循第二次重定向。 遵循第一個重定向但返回錯誤。

我一直在閱讀包含重定向的 JavaScript AJAX 響應會自動遵循,但在我看來並非如此。 瀏覽器自動跟隨第一個重定向,返回第一個重定向而不跟隨header中的第二個重定向。我的問題是我希望瀏覽器自動跟隨所有重定向。

重定向是 phpCAS 庫的一部分。 我有一個 API 寫在 PHP 中,每次在返回結果之前檢查用戶身份驗證。

這是順序。 需要注意的主要事情是,瀏覽器在執行 1 次重定向后返回第二個響應。 當我對localhost/example/api進行 AJAX 調用時,我更希望它一直運行並返回最后一個響應。

本地主機/示例

  • 使用 jQuery.ajax() 調用localhost/example/api

響應 1:localhost/example/api

  • 重定向到https://localhost/accounts/cas/login?service=api.example.com&gateway=true (使用 SSL)。

響應 2:(SSL)localhost/accounts/cas/login?service=api.example.com&gateway=true

  • 當存在查詢鍵“網關”時,登錄會簡單地重定向回由“服務”鍵提供的 URL,有或沒有票(向服務發出用戶登錄或未登錄的信號)。

響應 3:localhost/api?ticket=TICKET

  • 驗證票證並在沒有票證的情況下重定向回自身。

響應 4:localhost/api

  • 這次 CAS 客戶端查看 $_SESSION 以記住票證是什么,然后處理返回 JSONP 的 API 請求。

我在 OpenID 或 OpenAuth(orization) 上使用 CAS 沒有特別的原因。 CAS 只是我能夠在 WordPress 工作的第一個身份驗證模塊。我願意接受有關使用不同的身份驗證庫、CMS、框架等方面的建議。盡管如此,我希望只完成這個項目。 因此,重新加工越少越好。

正如您后來在評論中添加的那樣發現自己,ajax requests are subject to same origin policy

是的,您可以使用 JSONP - 但是,如果您有幸只支持 IE8 及更高版本, CORS可能是更好的解決方案。

基本上,添加標題,例如

access-control-allow-origin: http://api.example.com
access-control-allow-credentials: true

對於您的服務器答案,您可以解決跨源策略。

另請參閱此jQuery 票證,使其與 jQuery 兼容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM