go - 为什么 Google 的 OAuth2 文档建议将配置文件 ID 存储在 cookie 中?

标签 go google-oauth

谷歌的 OAuth2 documentation for Go ,标题为“使用 Go 验证用户”并涉及书架示例应用程序,建议将配置文件信息存储在 cookie 中。例如,参见 profileFromSession() 函数,也可以是 visible in GitHub .该文档说“因为配置文件信息存储在 session 中,应用程序可以检索它而无需再次从 Google+ API 获取它”。它存储 Google+ ID 和 DisplayName(通过 plus.Person .ID 和 plus.Person.DisplayName)。

但这不是不好的做法吗?客户是否可以轻松伪造用户配置文件,让他们通过在 cookie 中放入不同的用户 ID 来访问您应用程序中的任何用户数据?

从 cookie 获取配置文件时,它首先检查 token 是否有效,但仅在本地检查 token 结构是否包含访问 token 以及它是否已过期,而不会与 Google 的服务器进行任何通信。客户端当然有可能使用任意配置文件 ID 构造一个假 cookie。 cookie 已加密(参见 http://www.gorillatoolkit.org/pkg/sessions#NewCookieStore ),但只是对称加密,使加密 key 成为此次攻击的唯一障碍。

谷歌的 equivalent Java OAuth2 documentation似乎在做同样的事情。

我是不是误会了什么?我无法相信 Google 的文档会推荐如此不安全的东西。

最佳答案

示例使用 HMAC以防止 cookie 伪造。

更多细节:示例使用 Gorilla 的 securecookie访问 cookie 的包。此 securecookie 包使用 crypto/hmac用于签署和验证 cookie 的包。

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

securecookie 包的加密功能在防止伪造或窃取 cookie 方面不起作用。

关于go - 为什么 Google 的 OAuth2 文档建议将配置文件 ID 存储在 cookie 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46092368/

相关文章:

authentication - Web Google 身份验证 - 403 : disallowed_useragent exists? 的解决方法

csrf - Google OAuth 状态 token 实际上阻止了什么 CSRF?

go - 如何知道延迟函数是在成功执行函数后调用还是被 panic 调用

go - 为什么构建约束排除“/Users/rpurusho/go/src/google.golang.org/api/compute/v1”中的所有Go文件?

golangci-lint 常量显式类型

go - 无法让 Oauth2 TokenSource 刷新从存储中检索到的 token

ios - Google API 更改导致我的应用程序出现问题

powershell - 使用服务帐户访问 G Suite Admin SDK

linux - 在 Go 中获取管道状态

go - 眼镜蛇指挥官 : How to call a command from another command?