簡體   English   中英

在Google App Engine for Java上的子域之間共享當前用戶數據

[英]Share Current User Data Between Subdomains on Google App Engine for Java

我正在使用Google App Engine for Java,我希望能夠在子域之間共享會話數據:

  • www.myapp.com
  • user1.myapp.com
  • user2.myapp.com

我需要這個的原因是我需要能夠在嘗試訪問user1.myapp.com時檢測用戶是否登錄www.myapp.com。 我想這樣做是為了在他們自己的子域上為他們提供管理員能力,並允許他們在子域之間無縫切換而無需再次登錄。

我願意在子域之間共享所有cookie數據,這可以使用Tomcat,如下所示: 在2個子域之間共享會話數據

這可以用Java中的App Engine實現嗎?


更新1

我得到了一個很好的提示,我可以使用域名設置為“.myapp.com”的cookie來共享信息。 這允許我將類似“current_user”的內容設置為“4”,並且可以訪問所有子域上的內容。 然后,如果用戶沒有活動會話,我的服務器代碼可以負責檢查cookie。

這仍然不允許我訪問原始會話(這似乎可能是不可能的)。

我現在關心的是安全問題。 我是否應該允許用戶完全根據cookie(“current_user”== user_id)的事實進行身份驗證? 這似乎非常不安全,我當然希望我錯過了一些東西。

共享cookie是您案例的最佳方式。 但你不能用它來共享一個關於appengine的會話。 除了您有第三方服務來存儲會話的情況,例如Redis部署到雲實例。

您還需要為cookie添加一些身份驗證。 在密碼學中,有一種稱為消息認證碼( MAC )的特殊事物,或者最常見的是HMAC

基本上你需要存儲這個idsecret key user id + hash(兩個服務器都知道,但不是用戶)。 因此,每次您可以檢查用戶是否提供了有效的ID,例如:

String cookie = "6168165_4aee8fb290d94bf4ba382dc01873b5a6";
String[] pair = cookie.split('_');
assert pair.length == 2
String id = pair[0];
String sign = pair[1];
assert DigestUtils.md5Hex(id + "_mysecretkey").equals(sign);

另請TokenBasedRememberMeServices Spring Security的TokenBasedRememberMeServices ,您可以使用它作為示例。

暫無
暫無

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

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