Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在本地主机上使用GoogleOAuth_Python_Oauth_Google Api_Google Api Client - Fatal编程技术网

Python 在本地主机上使用GoogleOAuth

Python 在本地主机上使用GoogleOAuth,python,oauth,google-api,google-api-client,Python,Oauth,Google Api,Google Api Client,我开始将OAuth与Python和Django一起使用。我需要它的谷歌API。我正在使用localhost,因此无法为url回调注册域。我读过关于GoogleOAuth可以用于匿名域的报道。找不到,我怎么做,在哪里做 编辑: 我有这样的看法: def authentication(request): CONSUMER_KEY = 'xxxxx' CONSUMER_SECRET = 'xxxxx' SCOPES = ['https://docs.google.com/fee

我开始将OAuth与Python和Django一起使用。我需要它的谷歌API。我正在使用localhost,因此无法为url回调注册域。我读过关于GoogleOAuth可以用于匿名域的报道。找不到,我怎么做,在哪里做

编辑: 我有这样的看法:

def authentication(request):
    CONSUMER_KEY = 'xxxxx'
    CONSUMER_SECRET = 'xxxxx'
    SCOPES = ['https://docs.google.com/feeds/', ]

    client = gdata.docs.client.DocsClient(source='apiapp')
    oauth_callback_url = 'http://%s/get_access_token' % request.META.get('HTTP_HOST')
    request_token = client.GetOAuthToken(
      SCOPES, oauth_callback_url, CONSUMER_KEY, consumer_secret=CONSUMER_SECRET)
   domain = '127.0.0.1:8000'
   return HttpResponseRedirect(
        request_token.generate_authorization_url(google_apps_domain=domain))
这个错误是:

很抱歉,您已到达一个不使用Google应用程序的域的登录页面。请检查网址并重试

通过注册

编辑: 错误:

无法获取OAuth请求令牌:400,消费者没有证书:xxxxxxxxxxxxx.apps.googleusercontent.com


除此之外,您可能不希望在示例代码中包含实际的
消费者密钥
消费者密钥

尝试不带参数的代码:

return HttpResponseRedirect(request_token.generate_authorization_url())

需要明确的是,在OAuth 1.0或OAuth 2.0上开发时,可以将web应用程序流与localhost一起使用。OAuth2.0应该是首选,因为它是我们关注的机制。OAuth2.0的用户体验将会大大提高


没有什么可以阻止您使用localhost作为回调URL。我总是自己做这件事。您只需要确保回调URL完全匹配,包括任何端口号,并且由于明显的原因,您不能以这种方式部署应用程序。已安装的应用程序更复杂,但是如果您使用Django做一些事情,那么可以利用OAuth2.0是一个承载令牌系统这一事实。只要您将刷新令牌保留在服务器端,您就可以使用自己的带外应用程序进行身份验证,然后将承载令牌发送到已安装的应用程序。您安装的应用程序将有大约一个小时的时间窗口,在您需要重复该过程之前,您可以在其中进行调用。在大多数情况下,这对用户来说是透明的。承载令牌的传输应通过加密通道进行。

+1请给出示例代码中不应包含的内容的建议。我原以为OAuth2.0是现在的标准,但根据你的答案,我猜它在这种情况下仍然是实验性的?是的,你说得太对了@Cody Hess。我刚读了这篇文章,在谷歌集团里还有很多。OAuth 1.0目前是一种方式。@FeralOink还提到了带有特殊重定向URL的已安装应用程序,但有一个缺点是用户必须从浏览器窗口复制粘贴访问令牌。我为谷歌工作。请使用OAuth 2.0,而不是OAuth 1.0。我们的OAuth 2.0实现受到积极支持,目前是针对Google API进行授权的最佳方式。不要让API上的“实验性”标签吓倒你。请参阅我们在OAuth 2.0上支持的不同应用程序流的文档:@FeralOink-experiative确实意味着可能会发生破坏性的更改,但即使如此,这也不会很常见。OAuth 2.0的优势远远超过了这里的风险。然而,澄清一下,“实验”和“实验室”并没有那么大的不同。“实验性”只是意味着没有任何关于可靠性、可用性或破坏性更改的正式承诺。但这是谷歌。我们的“实验”通常是做事的首选方式。:-)我试过你的建议。谷歌已经请求允许访问文档。我想就是这样。现在谷歌把我重定向到。。。这对我来说是个错误,但这是运动。鲍勃,我感谢你对我问题的关注。在@Stanpol的建议下,我在问题上迈出了一步。但我仍然有这个问题,在
/get\u access\u token/?oauth\u verifier=
上,我有一个错误:消费者没有证书。。。我对我的问题进行了修改,包括最新的代码。我将非常感谢代码示例,您是如何做到这一点的,因为Google有点让我困惑。您是否尝试过在OAuth游乐场上玩耍?这可能有助于让您更深入地了解OAuth 1的工作原理。更清楚的是,您无法管理localhost域,因为无法从manage domains工具访问它,您将在该工具中上载X.509证书。必须先验证该域,然后才能为其上载证书,而这不能通过localhost完成。这只是您应该使用OAuth2的另一个原因。我相信只有在使用HMAC-SHA1签名方法的情况下,OAuth1才能使用localhost完成。如果必须使用OAuth 1,则需要切换签名方法。
return HttpResponseRedirect(request_token.generate_authorization_url())