簡體   English   中英

從其他域返回請求的Ajax時設置cookie

[英]Setting cookie when an Ajax requested is returned from a different domain

我有一個需要基本身份驗證的移動Web應用程序。 我設法在不同域的服務器上使用Ajax調用了基本身份驗證。 但是,我的回答有問題。

通常,會話ID將由Ajax響應通過設置的cookie標頭在瀏覽器中設置。 我注意到成功認證后並沒有發生。

我所做的是嘗試通過在返回響應時讀取標題來手動設置cookie。 我是通過jQuerys jqxhr對象實現的。 令我驚訝的是,即使服務器指示已返回sessionID,我也無法通過jqxhr在響應中看到任何已設置的cookie標頭。

這是跨域請求的預期行為嗎? 某些響應頭會被丟棄嗎? 這是瀏覽器的安全功能嗎? 如果是這樣,您會建議如何解決此問題(例如,返回正文中的會話ID,我不想這樣做,因為我在后台使用Shiro安全篩選器來解決此問題,我不會是否需要破解)?

請幫忙

您不能使用ajax請求跨域uri。 您必須實現自己的服務器端代理,該代理將與遠程身份驗證服務器一起處理請求/響應。 它可以僅復制/粘貼響應,但必須與客戶位於同一域中。

對於cookie來說,它們也是一樣,它們具有可以讀取/寫入它們的域。

您將被授權僅請求此代理。 它還可以處理cookie的創建過程,然后將cookie id返回給客戶端。

對於(一個非常簡單的)示例,在www.auth.com上,您具有以下webservice:

url : www.auth.com/auth
@params : string uuid, string password
@returns : int shiroSessionId // yes it's more complicated, but KISS for the example

您應該在www.mydomain.com/myAuth上創建一個類,該類將使用相同的參數獲取www.auth.com/auth服務,並創建本地會話Cookie

url : /myAuth
@params : string uuid, string password
@returns : int cookieId, -1 if login failed

最后,在www.mydomain.com/login.html中,您將具有以下js調用(在jquery中):

$.ajax(function() {
  url : '/myAuth',
  date : {uuid: inputUuid, password: inputPassword}, // provided by a form
  success(cookieId) {
    if(cookieId > 0) {
      alert('logged with cookie '+getCookie(cookieId));
    } else {
      alert('login failed');
    }
  }
});

希望能幫助到你。

問候

暫無
暫無

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

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