Google的OAuth2 documentation for Go,标题为"使用Go认证用户"并且涉及书架示例应用程序,建议将配置文件信息存储在cookie中。例如,参见profileFromSession()函数,visible in GitHub。该文档说明"由于个人资料信息存储在会话中,因此应用程序可以检索该信息,而无需再次从Google+ API中获取该信息。它存储了Google+ ID和DisplayName(通过plus.Person。ID和plus.Person.DisplayName)。
但这不是一种不好的做法吗?客户端是否容易伪造用户个人资料,只需在Cookie中添加不同的用户ID即可访问应用中的任何用户数据?
从cookie中获取配置文件时,它首先检查令牌是否有效,但只检查令牌结构是否包含访问令牌以及是否已过期,而不与Google的服务器进行任何通信。当然,客户端可以构造具有任意配置文件ID的假cookie。 cookie是加密的(参见http://www.gorillatoolkit.org/pkg/sessions#NewCookieStore),但只是对称的,使加密密钥成为这次攻击的唯一障碍。
Google的equivalent Java OAuth2 documentation似乎做了同样的事情。
我误解了什么吗?我无法相信Google的文档会推荐一些不安全的东西。
答案 0 :(得分:1)
该示例使用HMAC来防止Cookie伪造。
更多详细信息:该示例使用Gorilla的securecookie包来访问Cookie。这个securecookie包使用crypto/hmac包来签名和验证cookie。
如果通过HTTPS发送cookie,则第三方不能窃取cookie。
securecookie软件包的加密功能在防止伪造或盗窃cookie方面没有任何作用。