[英]Share Current User Data Between Subdomains on Google App Engine for Java
我正在使用Google App Engine for Java,我希望能够在子域之间共享会话数据:
我需要这个的原因是我需要能够在尝试访问user1.myapp.com时检测用户是否登录www.myapp.com。 我想这样做是为了在他们自己的子域上为他们提供管理员能力,并允许他们在子域之间无缝切换而无需再次登录。
我愿意在子域之间共享所有cookie数据,这可以使用Tomcat,如下所示: 在2个子域之间共享会话数据
这可以用Java中的App Engine实现吗?
我得到了一个很好的提示,我可以使用域名设置为“.myapp.com”的cookie来共享信息。 这允许我将类似“current_user”的内容设置为“4”,并且可以访问所有子域上的内容。 然后,如果用户没有活动会话,我的服务器代码可以负责检查cookie。
这仍然不允许我访问原始会话(这似乎可能是不可能的)。
我现在关心的是安全问题。 我是否应该允许用户完全根据cookie(“current_user”== user_id)的事实进行身份验证? 这似乎非常不安全,我当然希望我错过了一些东西。
共享cookie是您案例的最佳方式。 但你不能用它来共享一个关于appengine的会话。 除了您有第三方服务来存储会话的情况,例如Redis部署到云实例。
您还需要为cookie添加一些身份验证。 在密码学中,有一种称为消息认证码( MAC )的特殊事物,或者最常见的是HMAC 。
基本上你需要存储这个id
和secret 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.