首页 文章

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

提问于
浏览
5

我试图使用类似的服务帐户从cmdline访问谷歌 Cloud endpoints

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

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

当我在我的本地devserver上调用我的 Cloud endpoints 时,按预期工作,但是当我调用已部署的gae Cloud endpoints 时

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

似乎是对来自user_id_token._set_bearer_user_vars()的oauth.get_client_id(范围)调用失败了 .

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

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

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

我的目标是在没有用户参与的情况下调用 Cloud endpoints ,不确定我是否使用SignedJwtAsertionCredential调用是正确的路径,或者如果可能的话?

附加信息 .

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

endpoints 方法上的user_required为True

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

endpoints 在api资源管理器中按预期工作,并且当涉及auth流时 .

使用endpoints_proto_datastore库 .

2 回答

  • 2

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

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

    "Una retirada a tiempo es una victoria" -Napoleon Bonaparte

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

    Additional information

    在体验我对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

  • 10

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

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

相关问题