1

我有一个 GAE 应用程序,其 URL 我限制为管理员:

- url: /admin
  script: _go_app
  login: admin

我想用另一个 Go 程序 PUT 或 POST 到这个 url。我需要为客户端编写什么代码来向 GAE 和 dev_server.py 进行身份验证?有没有更明智的方式来模拟网络浏览器并登录?我不需要验证或授权其他用户,只需要该应用程序的管理员帐户。

这是 OAuth 吗?OAuth2? 开放身份?联邦?还有什么?

我意识到这是一个有点尴尬的问题,因为我什至不确定问这个问题的正确方法是什么。/admin但是,在使用我的(管理员)gmail 帐户登录后,我可以使用网络浏览器发布到(在此示例中) 。在这种情况下,请求(由 Chrome 发送)包含 cookie:__cfduidACSID(以及我认为是 Google Analytics ID)。大概其中一个负责我的身份验证。我如何获得其中之一?

作为一个附带问题,如果有人 MITMs 我的连接(通过 http),他们可以通过重用该 cookie 来劫持我的管理会话吗?

4

2 回答 2

2

GAE 喜欢 OAuth2

看看goauth2。它似乎是 Go 的规范 OAuth2 库。他们在https://code.google.com/p/goauth2/source/browse/oauth/example/oauthreq.go提供了一个相当全面的示例。

关于您的问题“大概其中一个负责我的身份验证。我如何获得其中之一?”,他们说

要获取客户端 ID 和密钥,请参阅此页面上“API 访问”选项卡下的“OAuth 2 凭据”部分:https ://code.google.com/apis/console/

最后,我对“如果有人 MITMs 我的连接(通过 http),他们可以通过重用该 cookie 来劫持我的管理会话吗?”的拙见。是您永远不应该通过普通 http 提供任何经过身份验证的连接(也不是进行身份验证的连接)。特别是管理部分。

编辑:要详细说明 MITM 问题,请确保对同一会话的任何登录请求和后续请求使用 HTTPS,并确保在 cookie 上设置SecureHttpOnly标记。

于 2013-06-06T15:06:08.987 回答
0

如果您想使用 Google 帐户,请使用 OAuth2。

有关详细信息,请参见此处:https ://developers.google.com/appengine/docs/go/users/overview (本节专门处理管理员视图)

于 2013-05-27T13:21:59.907 回答