0

的基本身份驗證更改的客戶端證書我想自動讓用戶重新登錄我的Flex應用程序,它使用基本身份驗證關於Flex

順便說一句,我已經注意到這個StackOverflow question,這是有關,但沒有解決註銷客戶端的問題。

例如,在用戶A登錄時,用戶B說到瀏覽器,進入登錄界面(也許在新標籤)和日誌英寸

這應該意味着我在送用戶B的憑據HTTP標頭,並且由於這些與用戶A不同,服務器會注意到這一事實並創建一個新的單獨會話。

但是,Flex的HTTP代理捕獲頭並實際忽略這些新憑據。

Flex確實提供了一種方法來告訴服務器註銷,而Flex登錄代碼可以在發送憑證之前每次調用此方法,但這似乎是一種醜陋的解決方法。我希望能夠做到這一點客戶端。我也可以使用非標準的頭部進行基本身份驗證(因爲我也控制了服務器端身份驗證),但這也看起來像一個醜陋的解決方法。

有什麼方法可以簡單地從Flex代碼結束客戶端的會話嗎?例如,這可能來自JavaScript。

有沒有一種方法可以直接在客戶端使用cookie,就像我可以在JavaScript中一樣?

我知道某些限制可能是由安全考慮引起的,但是我所有的通信都是給「家庭」服務器的,所以應該可以避免這些限制。

回答

1

你有點問這裏幾個不同的問題。

你不能真正手動結束一個basic-auth「session」(至少不是我所知道的);最好的情況是,你可以通過一種可變的basic-auth領域進行身份驗證,這可能會或可能不會爲你工作,但除此之外,在瀏覽器實例期間,你會遇到第一次驗證的會話。通常不是最好的方法,除非您確定用戶擁有該機器,或者可以依賴於每次會話後關閉瀏覽器。

那留下至少兩個其他選項。首先是用URLRequest對象發送你的憑證(我引用的帖子,我寫的帖子展示瞭如何去做),並讓你的HTTP響應返回一些指示憑證被接受的東西 - 例如GUID,也許,生成並存儲在服務器上的某個會話表(數據庫意義上),也許。然後,在連續的HTTP請求中,您可以在HTTP標頭中發送GUID,或者在每個GET或POST請求中發送一個值(類似於Facebook處理其API客戶端的方式),請檢查該值的及時性服務器,如果一切順利,繼續。如果要「註銷」,那麼您只需發送一個請求來使該GUID無效,在服務器上和Flex應用程序內執行必要的清理,並且所有應該都可以:下一個用戶可以坐下,登錄,驗證,並且過程繼續。

另一種方法是直接使用cookie。但是,Cookie機制實際上主要是爲您在Flex中處理的,因爲所有內容都由瀏覽器代表來回傳遞。例如,如果您使用用戶名和密碼發送URLRequest,並且服務器使用任何類型的cookie進行響應,那麼您之後創建的每個請求都將打包併發送相同的cookie,因此在大多數情況下,您只需要做的就是解析來自服務器的初始響應(設置Flex應用程序的狀態),假定Cookie持續存在,以及何時需要註銷,發送URLRequest以註銷,終止服務器上的Cookie,啓用狀態= 200做你的Flex應用程序清理,等等。儘管直接訪問cookie值並不是世界上最簡單的事情;你可以使用ExternalInterface作爲JavaScript的代理(這個在線和在這裏的例子,我敢肯定),並以這種方式得到他們,但是你甚至不需要這麼做。

希望有幫助。祝你好運!

0

還請注意this post,其中詳細介紹了Flex添加到HTTP請求中的一些令人難以置信的失真。