Google Cloud端点和服务帐户返回:Oauth框架用户与oauth令牌用户不匹配

时间:2014-01-02 17:33:55

标签: python google-app-engine oauth google-cloud-endpoints endpoints-proto-datastore

我尝试使用类似于

的服务帐户从cmdline访问Google云端点

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

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

当我在我的本地devserver上调用我的云端点时,按预期工作但是当我调用部署的gae云端点时,我得到了

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

似乎在来自user_id_token._set_bearer_user_vars()的oauth.get_client_id(范围)调用失败。

当我在异常上添加回溯时,它看起来来自_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

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

端点可以从api资源管理器中按预期工作,并且当涉及到auth流时。

使用endpoints_proto_datastore库。

2 个答案:

答案 0 :(得分:10)

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

所以我告诉你伟大的法国皇帝拿破仑波拿巴的话

“Una retirada a tiempo es una victoria” -Napoleon Bonaparte

这基本上意味着在你前进的时候离开,不要在OAUTH上浪费你的时间!

其他信息

在经历OAUTH的挫折的同时,我最终做了一些关于谁真正想出这个令人头疼的诱导概念的研究,结果发现创建者退出了这个项目并且实际上在他的博客中公开谴责OAUTH:

http://hueniverse.com/2012/07/oauth-2-0-and-the-road-to-hell/有趣地将这条道路命名为地狱之路。因此,如果创建者没有使用OAUTH,那么你绝对不应该。我已经开始在https://petitions.whitehouse.gov/申请使OAUTH非法使用,所以如果你愿意,你可以加入战斗并给我们投票,它目前正在获得牵引力,我们感谢任何支持,所以继续并给予这是投票。

enter image description here

答案 1 :(得分:2)

问题归因于" Google Apps"为应用程序选择的验证类型。此设置要求使用用户api的所有帐户都是example.com帐户,而服务帐户显然不是一个帐户。

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