gpt4 book ai didi

java - 在 Google App Engine for Java 的子域之间共享当前用户数据

转载 作者:搜寻专家 更新时间:2023-11-01 03:55:12 24 4
gpt4 key购买 nike

我正在使用 Google App Engine for Java,我希望能够在子域之间共享 session 数据:

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

我需要这个的原因是我需要能够检测用户在尝试访问 user1.myapp.com 时是否登录了 www.myapp.com。我想这样做是为了让他们能够管理自己的子域,并允许他们在子域之间无缝切换而无需再次登录。

我愿意在子域之间共享所有 cookie 数据,这可以使用 Tomcat 实现,如下所示:Share session data between 2 subdomains

使用 Java 中的 App Engine 可以做到这一点吗?


更新 1

我得到一个很好的提示,我可以使用域设置为“.myapp.com”的 cookie 共享信息。这允许我将“current_user”之类的东西设置为“4”,并可以在所有子域上访问它。如果用户没有 Activity session ,那么我的服务器代码可以负责检查 cookie。

这仍然不允许我访问原始 session (这似乎是不可能的)。

我现在关心的是安全问题。我是否应该允许用户仅根据 cookie ("current_user"== user_id) 的事实进行身份验证?这似乎非常不安全,我当然希望我遗漏了一些东西。

最佳答案

共享 cookie 是最适合您的情况的方式。但是您不能使用它在 appengine 上共享 session 。除非您有第 3 方服务来存储 session ,例如部署到云实例的 Redis。

您还需要为您的 cookie 添加一些身份验证。在密码学中有一个特殊的东西叫做消息认证码(MAC),或者最常见的是HMAC。 .

基本上你需要存储user id + 这个id的散列和一个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);

另请参阅 Spring Security 的 TokenBasedRememberMeServices,您可以将其用作示例。

关于java - 在 Google App Engine for Java 的子域之间共享当前用户数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9795197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com