5

我尝试使用类似于的服务帐户从 cmdline 访问 google 云端点

https://code.google.com/p/google-api-python-client/source/browse/samples/service_account/tasks.py

按照示例中的说明,我创建了一个 clientid + pk12 证书,并使用它们通过来自 oauth2client.client 模块的 SignedJwtAsertionCredential 调用创建凭据。

当我调用在本地开发服务器上运行的云端点时按预期工作但是当我调用已部署的 gae 云端点时,我得到

Oauth 框架用户与 oauth 令牌用户不匹配。

似乎在来自 user_id_token._set_bearer_user_vars() 的 oauth.get_client_id(scope) 调用上失败了。

当我在异常上添加回溯时,它看起来来自 _maybe_raise_exception

E 2014-01-02 10:30:53.926 提高 NotAllowedError(error_detail) E 2014-01-02 10:30:53.926 NotAllowedError

有没有办法在不更改应用程序的身份验证类型的情况下解决此错误?由于域限制,似乎不允许请求?

我的目标是在没有用户参与的情况下调用云端点,不确定我是否是使用 SignedJwtAsertionCredential 调用的正确路径,或者是否可能?

附加信息。

端点的身份验证类型设置为“Google App Domain”

user_required 在端点方法上为 True

当我使用https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ya29时,从 SignedJwtAssertCredential 生成的访问令牌符合预期 。

端点按 api explorer 的预期工作,并且涉及到身份验证流。

使用 endpoints_proto_datastore 库。

4

2 回答 2

10

从广泛的研究中,我得出的结论是,实施 OAuth 对应用程序来说不是一种可行的身份验证方法,因为实施起来很糟糕。在花了无数小时在 Stackoverflow 上调试和询问有关简单 Twitter oAuth 实现的问题后,同时收到无数错误答案(这让我有把握地推断出很大一部分开发人员不知道如何使用 OAuth)我决定不再使用认证。

所以我把伟大的法国皇帝拿破仑·波拿巴的话留给你

“Una retirada a tiempo es una victoria” ——拿破仑·波拿巴

这基本上意味着在你领先的时候出去,不要在 OAUTH 上浪费你的时间!

附加信息

在对 OAUTH 感到沮丧的同时,我最终对谁提出了这个令人头疼的概念进行了一些研究,结果发现创建者已经退出了这个项目,并且实际上在他的博客中公开谴责了 OAUTH:

http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/有趣的标题是地狱之路。因此,如果创建者没有使用 OAUTH,那么您也绝对不应该使用。我已在https://petitions.whitehouse.gov/上发起请愿,要求使用 OAUTH 非法,因此,如果您愿意,可以加入战斗并给我们投票,它目前正在获得关注,我们感谢任何支持,所以继续投票吧。

在此处输入图像描述

于 2014-01-02T17:56:42.703 回答
2

该问题是由于为应用程序选择了“Google Apps”身份验证类型。此设置要求所有使用 users api 的帐户都是 example.com 帐户,而服务帐户显然不是一个。

一旦我们将 Auth Type 更改为 Google 帐户,使用服务帐户和验证 client_id 就没有问题了。

于 2014-07-03T15:41:27.927 回答