支持匿名用户和注册用户

时间:2011-10-19 01:11:16

标签: java rest playframework user-management

我正在尝试为游戏创建RESTful API。

游戏将支持匿名用户(现在只想玩的用户)和愿意注册的用户。

我想要实现的是,当未注册的用户仍在使用同一台计算机时,与其关联的数据将被保留。我很难解决问题,并为那些选择注册的人提供适当的用户支持。

GET users/create Users.create 将创建一个新的“匿名”用户,该用户将返回用户(以及可以识别的唯一令牌)

POST users/register Users.register 将采用可选令牌(如果用户以前是匿名的),电子邮件和密码。它将创建一个新的注册用户(如果提供了相同的令牌,或者是新的注册用户)。

POST auth/login Auth.login 将获取电子邮件地址和密码,如果成功则返回用户

POST auth/authenticate将采用唯一令牌,根据令牌是否存在于数据库中返回200/500。

基本上,每次调用服务器都需要其中一个独特的令牌。我将能够使用它来跟踪与之关联的用户。

在尝试为注册用户实现某种“记住我”功能时,我真正感到困惑。如果注册用户拥有这些唯一令牌中的一个,我可以将其用作记忆我令牌吗?看起来这是一个糟糕的选择,安全性方面,可能导致很多auth/authenticate失败。由于每次用户登录新计算机时都必须创建新令牌。

我完全错过了什么吗?整个过程似乎都有安全灾难。对于这种行为,有没有好的配方?

干杯,

伊恩

2 个答案:

答案 0 :(得分:2)

令牌(作为存储在浏览器中的cookie中的唯一标识符)是唯一的方式(我知道),您可以用来识别用户唯一考虑到Play是无状态的。

密钥不是将令牌作为参数发送给请求,而是直接在每个请求上从cookie(播放会话)中检索它。

关于安全,它应该是相对安全的。 Play中的cookie是加密的,这意味着它们不能被更改或伪造。如果您在顶部添加SSL,则不应该嗅探它们,因此任何人都不应该“伪造”其他用户。为了进一步增强这种使用UUID(更难生成有效的令牌),它应该可以工作。

事实上,当你想到它时,在Play中使用“会话”的唯一方法是将用户ID(或某些标识符)存储在应用程序的cookie中,这基本上就是你想要做的。

哦,正如Brian Kelly所说,不要使用GET来创建用户

答案 1 :(得分:1)

您检查了play security guide。特别是关于跨站点请求伪造的部分 Play使用 checkAuthenticity()方法验证每个帖子请求的真实性 请务必使用#{form} 标记,其中包含表单中的真实性标记。 或者,在普通的html表单标记中使用#{authenticityToken /} 标记。