为什么Google的OAuth2文档建议在Cookie中存储配置文件ID?

时间:2017-09-07 09:10:32

标签: go google-oauth2

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的文档会推荐一些不安全的东西。

1 个答案:

答案 0 :(得分:1)

该示例使用HMAC来防止Cookie伪造。

更多详细信息:该示例使用Gorilla的securecookie包来访问Cookie。这个securecookie包使用crypto/hmac包来签名和验证cookie。

如果通过HTTPS发送cookie,则第三方不能窃取cookie。

securecookie软件包的加密功能在防止伪造或盗窃cookie方面没有任何作用。