1

我想为播放框架实现一个身份验证系统。
来自官方文档:

由于 Session 只是一个 Cookie,它也只是一个 HTTP 标头,但 Play 提供了一个辅助方法来存储会话值:

好吧,您将内容存储在 cookie 中......
无论如何,我注意到 servlet 3.0 声明了比 pla 2.0 中当前使用的要好得多的新会话范围。
目前,所有会话信息都存储在 cookie 中:这意味着您只能存储最少的数据,例如 user.id,否则将会有大量的 http 流量。
Servlet 3.0 像 php 会话一样工作:只有一个 id 由系统自动存储在客户端中,而不是服务器中的所有会话数据。此外,针对 cookie 窃取攻击的每个请求都会重新生成 cookie。
我注意到 Spring 已经使用了这个规范“@scope(session)”,我认为这是游戏框架中最大的错误..(文档中的错误示例也不好)
它确实不是可接受的当前系统,太慢和不安全。

有一种方法可以使用 servlet 3.0 会话范围,或者您是否打算在未来的版本中实现它?

尊重尼古拉

4

1 回答 1

1

Sessions:是的,这是事实,默认情况下,Play 的 session 仅存储在 cookie 范围内,我很确定这是出于某种目的。Play clean 实现旨在从最小的依赖项开始,因为它不仅旨在构建common具有强制使用 DB 的 Web 应用程序并且其他typical可用的东西,但是......有时您需要自己添加 2cc。

身份验证/授权:幸运的是,您不需要从头开始创建这些机制,很少有公共可用模块可以完成这项工作。我最喜欢的是Joscha Feth 的Play Authenticate - 完整的堆栈,用于授权和身份验证,具有多语言支持、多提供商支持(Facebook、Twitter 等)、角色和权限(使用 Deadbolt2)等。

前段时间我还发布了基于 的示例,PA它演示了更好的会话处理,它(几乎)可以满足您的所有需求。它不会sesId在每个请求上刷新,但这只是很小的修改。你可以自己实现。此外,欢迎您发送更多想法以使会话更加安全,我已打开!

Source code is published in 2.0.4_sessions branch in my fork. Joscha is interested about pulling it to official PA samples, anyway I'd like to deliver finished solution, so - as I wrote you can join :)

于 2013-02-08T17:59:09.267 回答