[英]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.