2011-10-16 112 views
0

我的web應用程序由兩個部分組成:GWT身份驗證的用戶會話

  1. GWT應用程序,做所有的工作。
  2. 手工製作的servlet旨在處理OpenID身份驗證工具。

我需要將p.2連接到p.1。我在讀LoginSecurityFAQ,所以我想確認我的理解在這裏是否正確。

  1. 一旦OpenID提供商確認用戶是好的並給我它的身份,我應該註冊會話。
  2. 要「註冊」會話,我應該在我的數據庫中的某個位置存儲OpenID身份和會話ID之間的映射(identity =「https://www.google.com/accounts/o8/id?id=wwyruiwncuyrwieruyfakefakefake」會話ID是一個大的隨機字符串,如「HihohohIUHOIUY87Y * & Ttgi6yUYGIuygUHGugyg^G6g」)。
  3. 該會話ID應該存儲在客戶端的cookie中。
  4. 每次從客戶端發送任何請求時,在服務器端,我應該檢查客戶端的會話ID是否足夠新鮮(活動),並且我還應該使用它來解析客戶端身份以防萬一需要。

是不是?如果會話ID真的很大,它足夠安全嗎?

回答

1

你的想法是對的,我也是這麼做的。

就在幾個注意事項:

1)如果你想堅持的身份,不要忘記設置的境界權利。根據OpenID提供商的不同,您可能會在下次登錄時爲同一用戶提供不同的身份。我認爲Google的OpenID要求您使用您的服務器名稱加端口:

openIdManager.setRealm("http://" + req.getServerName() + ":" + req.getServerPort()); 

2)爲什麼要創建自己的會話管理?這是相當多的額外工作,你可能最終會寫一些不安全的東西。使用常見的http servlet會話。

3)你不需要,如果你使用HTTP會話管理會話超時,但如果你需要攔截所有GWT RPC調用,在正確的地方可能會在RemoteServiceServlet實現是壓倒一切服務方法。