繁体   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