7

谷歌在这里有一个 OAuth2 客户端的例子

我对 OAuth2 完全陌生,我希望在将 OAuth2 与我的应用程序集成之前让这个示例正常工作。我所做的如下:

  1. 注册一个测试应用程序
  2. 获取客户端 ID 和客户端密码
  3. 将这些值配置到 client_secrets.json
  4. 运行测试应用程序:python moderator.py

该应用程序打开一个浏览器,我可以(作为用户)在其中授权该应用程序访问我的帐户。但谷歌是这样抱怨的(400 Bad Request):

Error: redirect_uri_mismatch
The redirect URI in the request: http://localhost:8080/ did not match a registered redirect URI
Learn more
Request Details
from_login=1
scope=https://www.googleapis.com/auth/moderator
response_type=code
access_type=offline
redirect_uri=http://localhost:8080/
approval_prompt=auto
as=-xxxxxxxxxxxxx
pli=1
client_id=xxxxxxxxxxx.apps.googleusercontent.com
authuser=0
hl=en

我猜 localhost:8080 来自由 moderator.py 启动的内部 Web 服务器。我的问题是:有人让这个例子起作用了吗?我还需要哪些其他组件(apache 配置、DNS、...)

我对 OAuth2 感到非常困惑,任何帮助将不胜感激。

4

4 回答 4

2

首先,对不起,如果我的回答不是很准确,因为我对 OAuth(甚至是 python)也很陌生……如果来得太晚,我也很抱歉,我通常不会访问这里。

您是否尝试过使用它(为我工作):REDIRECT_URI = 'urn:ietf:wg:oauth:2.0:oob'

检查这个:https ://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi

在这里,我有一段代码可以运行完整的 OAuth 流程。

于 2013-07-29T20:28:54.507 回答
0

也许尝试向 Google 注册您的外部 IP(可能需要在您的路由器上进行一些端口转发)?如果这失败了,也许你可以使用 Python 的 SimpleServer,注册你的 IP 并让这个服务器来处理重定向。

于 2014-03-06T03:56:36.750 回答
0

在 OAuth 2.0 中,redirect_uri 参数通常是向提供者注册的。提供者还应该强制执行 https-only redirect_uri。

您需要在此处向 Google 注册 redirect_uri:https ://code.google.com/apis/console/?pli=1#access

于 2012-07-12T15:31:10.147 回答
0

您的 redirect_uri 设置为“ http://localhost:8080/ ”,因为您将默认(我不知道如何描述)标志参数传递给 run_flow(flow, storage, flags)

如果您查看 run_flow() 函数的定义,您会发现:

It presumes it is run from a command-line application and supports the
following flags:

    ``--auth_host_name`` (string, default: ``localhost``)
       Host name to use when running a local web server to handle
       redirects during OAuth authorization.

    ``--auth_host_port`` (integer, default: ``[8080, 8090]``)
       Port to use when running a local web server to handle redirects
       during OAuth authorization. Repeat this option to specify a list
       of values.

    ``--[no]auth_local_webserver`` (boolean, default: ``True``)
       Run a local web server to handle redirects during OAuth
       authorization.
于 2015-12-18T18:25:29.330 回答