环境 - Python 2.7.3,webpy。

我正在尝试使用 Python web.py 对 github 进行简单的 oauth 3 方式身份验证。根据github上的基本oauth指南,我正在做这样的事情:

import web,requests
import oauth2,pymongo,json
from oauth2client.client import OAuth2WebServerFlow
urls=('/', 'githublogin',
      '/session','session',
      '/githubcallback','githubCallback');
class githublogin:
  def GET(self):
    new_url = 'https://github.com/login/oauth/authorize'
    pay_load = {'client_id': '',
                'client_secret':'',
                'scope':'gist'
               }
    headers = {'content-type': 'application/json'}
    r = requests.get(new_url, params=pay_load, headers=headers)
    return r.content

这将我发送到 GH 登录页面。一旦我登录 - GH 不会将我重定向到回调。 redirect_uri 参数在 github 应用中配置。我已经仔细检查以确保这是正确的。
 class githubCallback:
   def POST(self):
     data =  web.data()
     print data
   def GET(self):
     print "callback called"

相反在浏览器中我看到http://<hostname>:8080/session和 404 消息,因为我还没有配置 session URL。这是第 1 个问题。第 2 个问题 - 如果我配置 session URL 并打印出帖子消息
class session:
  def POST(self):
    data =  web.data()
      print data
    def GET(self):
      print "callback called"

我可以看到一些发布到 URL 的数据,其中包含名为“authenticity_token”的内容。

我尝试使用 python_oauth2 库,但无法通过 authorization_url 调用。所以我尝试了这个更简单的请求库。有人可以向我指出这里出了什么问题。

最佳答案

我不确定您的问题是什么,但请尝试在下面重现此流程,首先使用浏览器手动,然后使用您的 python 库。它将帮助您调试问题。

  • http://requestb.in/ 上创建一个请求箱。请求箱基本上是一种记录所有发送给它的 HTTP 请求的服务。您将使用它而不是回调来记录发送到回调的内容。复制请求 bin 的 URL,类似于 http://requestb.in/123a546b
  • 转到您在 GitHub ( https://github.com/settings/applications ) 上的 OAuth 应用程序设置,输入您的特定应用程序的设置,并将回调 URL 设置为您刚刚创建的请求 bin 的 URL。
  • 向 GitHub OAuth 页面发出请求,并定义了 client_id。只需在浏览器中输入以下 URL,但将 YOUR_CLIENT_ID_HERE 更改为 OAuth 应用程序的客户端 ID:
    https://github.com/login/oauth/authorize?client_id=YOUR_CLIENT_ID_HERE
  • 输入您的用户名和密码,然后单击授权。然后 GitHub 应用程序会将您重定向到您创建的请求 bin 服务,浏览器中的 URL 应该类似于(注意代码查询参数):
    http://requestb.in/YOUR_REQUEST_BIN_ID?code=GITHUB_CODE
    (例如, http://requestb.in/abc1def2?code=123a456b789cdef )

    另外,浏览器中页面的内容应该是“ok”的(这是请求bin服务返回的内容)。
  • 转到您创建的请求 bin 页面并刷新它。您现在将看到 GitHub OAuth 服务器发送给您的 HTTP GET 请求的日志条目,以及所有 HTTP header 。基本上,您会在那里看到与您重定向到的 URL 中存在的代码参数相同的代码参数。如果您获得此参数,您现在就可以使用此代码和您的客户端密码发出 POST 请求,如您正在使用的指南的第 2 步中所述:http://developer.github.com/v3/oauth/#web-application-flow

  • 如果这些步骤中的任何一个给您带来问题,请告诉我。

    关于python - Github api v3 通过 python oauth2 库访问 - 重定向问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15610749/

    10-14 14:10
    查看更多