【问题标题】:Modify authorization URL format using requests-oauthlib使用 requests-oauthlib 修改授权 URL 格式
【发布时间】:2017-06-28 06:09:23
【问题描述】:

我正在使用requests-oauthlib 通过 ETrade API 进行身份验证。它要求授权 URL 具有以下格式:

https://us.etrade.com/e/t/etws/authorize?key={oauth_consumer_key}&token={oauth_token}

但是,当我调用authorization_url() 时,它使用oauth_token 而不是token 作为该参数。目前我正在使用format() 自己格式化URL,但现在我同时拥有token 和oauth_token 参数。这有效,但完全不优雅。有没有办法修改authorization_url() 的行为以允许我需要的 URL 格式?

为了完整起见,这是我的代码:

oauth_session = requests_oauthlib.OAuth1Session(config.oauth_consumer_key, config.consumer_secret, callback_uri='oob')


def get_request_token():
    path = 'oauth/request_token'
    url = base_url + path
    return oauth_session.fetch_request_token(url)


def get_authorization_url(request_token):
    url_format = 'https://us.etrade.com/e/t/etws/authorize?key={oauth_consumer_key}&token={oauth_token}'
    url = url_format.format(oauth_consumer_key=config.oauth_consumer_key, oauth_token=request_token['oauth_token'])
    return oauth_session.authorization_url(url)

request_token = get_request_token()
print(get_authorization_url(request_token))

【问题讨论】:

    标签: python oauth python-requests etrade-api


    【解决方案1】:

    authorization_url() 函数是一个便捷函数,它调用通用函数将查询参数添加到 url(OAuthLib 的 common.add_params_to_uri() 反过来使用 urlparse.urlunparse())。没有办法让authorization_url() 省略oauth_token 参数。

    返回的类型是str(在 Python 3 中),因此只要您确定 url 和标记将只包含有效字符,您就可以通过使用纯字符串格式调用获得与您相同的结果已经在你的函数中完成了。

    但是,如果额外的 oauth_token 参数不会导致任何问题,我建议使用 authorization_url() 函数以提供额外的安全性。

    此外,无需在您的函数中进行额外的 str.format() 调用 - authorization_url() 采用可用于指定这些参数的 kwargs:

    def get_authorization_url(request_token):
        url = 'https://us.etrade.com/e/t/etws/authorize'
        return oauth_session.authorization_url(url,
                                               key=config.oauth_consumer_key, 
                                               token=request_token['oauth_token'])
    

    【讨论】:

    • 据我所知,额外的oauth_token 参数不会导致任何问题。 authorization_url() 提供了哪些额外的安全性?它是否对令牌进行 URL 编码?还有什么?
    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 2014-09-18
    • 1970-01-01
    • 2020-11-29
    • 2020-06-05
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多