3

我正在尝试使用 API 对应用程序进行身份验证。
就是这样:

  1. 我正在使用webbrowser.open.
  2. 用户对应用程序进行身份验证,并被重定向到另一个 URL,该
    https://stackexchange.com/oauth/login_successURL 带有使用此 URL 编码的参数。
    示例重定向 url 是:
    .../login_success#access_token=xyz&expires=00000

我当前的代码:

auth_url = 'https://stackexchange.com/oauth/dialog'
def authenticate():
    scope = "write_access,private_info,read_inbox"
    url = make_url(auth_url,client_id=132,
                   scope=scope,response_type='code',
                   redirect_uri='https://stackexchange.com/oauth/login_success')
    webbrowser.open(url)

用户身份验证后如何获取重定向 URL(用户被带到的 URL)???

4

2 回答 2

3

尝试为一个请求启动您自己的小型 HTTP 服务器,让 API 重定向到它并等待重定向的请求出现。这不是一个完整的例子,只是基本概念:

import BaseHTTPServer
auth_url = 'https://stackexchange.com/oauth/dialog'

# replace with your own http handlers
def wait_for_request(server_class=BaseHTTPServer.HTTPServer,
                     handler_class=BaseHTTPServer.BaseHTTPRequestHandler):
    server_address = ('', 8000)
    httpd = server_class(server_address, handler_class)
    return httpd.handle_request()

def authenticate():
    scope = "write_access,private_info,read_inbox"
    url = make_url(auth_url,client_id=132,
                   scope=scope,response_type='code',
                   redirect_uri='http://localhost:8000/login_success')
    webbrowser.open(url)
    wait_for_request()

不过,您可能需要使用 HTTPS。从长远来看,使用现有的 OAuth 实现可能会更好。

于 2013-03-19T07:05:51.090 回答
-1

用户通过堆栈交换进行身份验证后,SE 页面将重定向回您的页面(下面的“redirect_uri”)。您的代码当前重定向到https://stackexchange.com/oauth/login_success;相反,您应该重定向到您控制的页面。

  1. 在https://stackexchange.com/oauth/dialog使用这些查询字符串参数 打开一个新窗口
    • client_id
    • 范围
    • 重定向uri
    • 状态 - 可选
  2. 用户批准您的应用
  3. 用户被重定向到redirect_uri,这些参数在散列中
    • 访问令牌
    • expires - 可选,仅当范围不包含 no_expiry

来源:https ://api.stackexchange.com/docs/authentication

于 2013-03-19T07:11:22.160 回答