gpt4 book ai didi

google-app-engine - 带有 OpenID 的 App Engine remote_api

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:34 25 4
gpt4 key购买 nike

我最近尝试将我的 App Engine 应用切换为使用 openID,但我在使用 remote_api 进行身份验证时遇到了问题。 remote_api 的旧身份验证机制似乎不起作用(这是有道理的)- 我收到“urllib2.HTTPError:HTTP 错误 302:已找到”,我认为这是 appengine 将我重定向到我的 openid 登录页面设置。

我想我遗漏了一些相当明显的东西。目前我的 remote_api 脚本中包含以下内容 -

remote_api_stub.ConfigureRemoteDatastore(app_id=app_id, path='/remote_api', auth_func=auth_func, servername=host, secure=secure)

auth_func 在哪里

def auth_func():
return raw_input('Username:'), getpass.getpass('Password:')

有什么我需要提供给 remote_api 的想法吗?我想 bulkloader 也会遇到类似的问题。干杯,

科林

最佳答案

这很有趣。

查看remote_api,身份验证的流程似乎是这样的:

不过,我找不到很多关于新 OpenID 支持的文档 Nick's blog entry内容丰富。

这是我编写的测试应用程序,用于查看其工作原理:

应用程序.yaml:

handlers:
- url: /remote_api
script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py
login: admin
- url: /.*
script: test.py

测试.py:

class MainPage(webapp.RequestHandler):
def get(self):
user = users.get_current_user()
if user:
self.response.out.write("Hi, %s!<hr>admin is %s" % (user.user_id(),
users.is_current_user_admin()))
else:
self.redirect(users.create_login_url('/', None,
'https://www.google.com/accounts/o8/id'))

在 Google 帐户和联合登录之间切换我的身份验证模式,我注意到一些事情:

  • 管理员用户被带有 OpenID 的 is_current_user_admin() 正确识别
  • 混合模式不起作用。将身份验证设置为 Google 帐户后,使用 federated_identity 调用 create_login_url 会引发 NotAllowedError
  • ACSID cookie 仍然在登录过程结束时生成,只是它来自/_ah/openid_verify 而不是/_ah/login

那么在使用联合登录时 remote_api 发生了什么?如果我们使用默认的 appengine_rpc.HttpRpcServer,它会忠实地遵循顶部描述的相同 Google 帐户身份验证过程,只是应用不再认为/_ah/login 返回的 ACSID cookie 有效,因此由于您仍未通过身份验证,您将获得 302 重定向到 OpenID 登录页面/_ah/login_required。

我不知道这里的正确解决方案是什么。似乎需要更新 API。也许 Nick 或其他 Google 员工可以权衡一下。

现在,这里有一个 hacky 解决方法:

  • 为您的应用启用联合登录
  • 确保在为控制台脚本调用 remote_api_stub.ConfigureRemoteDatastore 时传递 save_cookies=True
  • 尝试控制台身份验证并收到 302 错误
  • 通过应用的网络界面以管理员身份登录
  • 在您的浏览器 cookie 中,找到 myapp.appspot.com 的 ACSID cookie
  • 查找并编辑您的本地 ~/.appcfg_cookies 文件
  • 用浏览器中的那个替换 myapp.appspot.com 的 ACSID cookie

下次您尝试使用 remote_api 时,它应该可以在不提示输入凭据的情况下工作。不过,每次 cookie 过期时,您都必须重复最后 4 个步骤。您可以在管理控制台中将过期时间从 1 天延长到最长 2 周,以尽量减少烦恼。玩得开心!

关于google-app-engine - 带有 OpenID 的 App Engine remote_api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2981226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com