Sam*_*rds 5 java subdomain session google-app-engine
我正在使用 Google App Engine for Java,并且希望能够在子域之间共享会话数据:
我需要这样做的原因是我需要能够检测到用户在尝试访问 user1.myapp.com 时是否登录了 www.myapp.com。我想这样做是为了给他们自己的子域的管理能力,并允许他们在子域之间无缝切换而无需再次登录。
我愿意在子域之间共享所有 cookie 数据,这可以使用 Tomcat 实现,如下所示:Share session data between 2 subdomains
使用 Java 中的 App Engine 可以做到这一点吗?
我得到了一个很好的提示,我可以使用域设置为“.myapp.com”的 cookie 来共享信息。这允许我将“current_user”之类的内容设置为“4”,并可以在所有子域上访问它。如果用户没有活动会话,我的服务器代码可以负责检查 cookie。
这仍然不允许我访问原始会话(这似乎不可能)。
我现在关心的是安全。我是否应该仅根据 cookie ("current_user" == user_id) 对用户进行身份验证?这似乎非常不安全,我当然希望我错过了一些东西。
共享 cookie 是适合您情况的最佳方式。但您不能使用它在 appengine 上共享会话。除非您有第三方服务来存储会话,例如部署到云实例的 Redis。
您还需要向 cookie 添加一些身份验证。在密码学中有一种特殊的东西,称为消息验证码(MAC),或者最常见的是HMAC。
基本上你需要存储user idthisid和 a的 + 哈希secret key(两个服务器都知道,但用户不知道)。因此,每次您都可以检查用户是否提供了有效的 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);
Run Code Online (Sandbox Code Playgroud)
还可以看看TokenBasedRememberMeServicesSpring Security,您可以使用它作为示例。
| 归档时间: |
|
| 查看次数: |
777 次 |
| 最近记录: |