3

我必须将一些文件传输到远程服务器,为此我必须执行 OAuth2.0 以获取访问令牌,然后只需执行 POST 请求来上传文件。

现在我懒得在云上设置一个 Django 项目,然后在没有“太好”的库的情况下执行 OAuth2。

所以,我正在考虑使用rauth lib 作为一个简单的 python 脚本来执行 OAuth2,而不需要真正设置一个接受请求和所有的服务器。

但是,在远程服务器配置文件中,我需要提供一个 redirect_url,当然还需要在 rauth 客户端库中提供。

是否有任何可能的方法可以在没有真正在云上设置项目的情况下进行此授权。我正在寻找一个简单的 python 脚本。

4

1 回答 1

3

我是 rauth 的作者和维护者。

Rauth 不再强制执行 a redirect_uri,因此如果您的提供商允许,那么您可以放弃使用它。但是,如果您的最终目标不是设置服务器,即使提供redirect_uri者要求,这也应该是可行的。例如,您可以重定向到本地主机,您可以在其中使用 Flask 设置最小服务器,或者如果提供商允许它,则可以使用其他一些任意 URL,例如 Facebook 提供https://www.facebook.com/connect/login_success.html用于这个目的。您使用的提供商可能有类似的方案。这是一个关于 rauth 的例子。

另一种选择是将 Bearer Auth 与 grant_type=password 一起使用。所有 OAuth 2.0 提供者都应该支持 Bearer Auth,但可能不实现密码 grant_type。这不需要 a redirect_uri,而是您最终将您的用户凭据传递给服务器,它应该向您返回一个访问令牌。如果您的提供商允许使用 grant_type 密码进行 Bearer Auth,这可能是您的理想选择。Rauth 0.5.3 默认尝试使用 Bearer Auth,因此您所要做的就是传入 grant_type。在尝试之前一定要更新。

这是一个简单的例子:

# assume you have constructed an OAuth2Service object and bound it to `serv`

params = {'grant_type': 'password',
          'username': 'foo',
          'password': 'hunter2'}

s = service.get_auth_session(params=params)
r = s.get('https://example.com/api/some/endpoint')

根据提供者和您想要做什么,可能需要进行更多调查。但是,希望这能给您一些帮助。

编辑

我认为我对密码 grant_type 的评论有点令人困惑:我似乎暗示你必须将它与 Bearer Auth 一起使用(这里的 Bearer Auth 我的意思是在 Bearer 格式的 Authorization 标头中附加访问令牌),但实际上你没有不。在实体方法 [1] 中发送凭据是可以接受的,尽管不鼓励。如果您使用 rauth 并发现身份验证未按预期工作,您可能需要像这样禁用 Bearer Auth:

s = service.get_auth_session('/some/resource',
                             data={'code': code},
                             bearer_auth=False)

从规范:

[1] “客户端应该使用带有承载 HTTP 授权方案的授权请求标头字段使用承载令牌发出经过身份验证的请求。资源服务器必须支持此方法。”

于 2013-03-29T04:13:05.387 回答