我必须将一些文件传输到远程服务器,我必须执行OAuth2.0以获取访问令牌,然后只需执行POST请求即可上传文件。
现在我懒得在云上设置一个Django项目然后执行OAuth2,虽然没有“太好”的lib了。
所以,我正在考虑使用rauth lib作为一个简单的python脚本来执行OAuth2,而没有真正设置一个接受请求和所有的服务器..
但是,在远程服务器配置文件中,我需要提供redirect_url,当然还有rauth客户端库。
在没有真正在云上设置项目的情况下,是否有任何可能的方法来执行此授权..我正在寻找简单的python脚本。
答案 0 :(得分:2)
我是rauth的作者和维护者。
Rauth不再强制执行redirect_uri
,因此如果您的提供商允许,那么您可以放弃使用它。但是,如果您的最终目标不是设置服务器,那么即使提供者需要redirect_uri
,这也应该是可行的。例如,您可以重定向到localhost,在那里您可以使用Flask设置最小服务器,或者如果提供者允许,还可以使用其他任意URL,例如, Facebook为此目的提供https://www.facebook.com/connect/login_success.html。您正在使用的提供商可能有类似的方案。 Here's an example与rauth。
另一种选择是使用带有grant_type = password的Bearer Auth。所有OAuth 2.0提供程序假设支持Bearer Auth,但可能无法实现密码grant_type。这不需要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我的意思是在承载格式的授权标题中粘贴访问令牌),但是实际上你没有。尽管不鼓励,但在实体方法[1]中发送凭证是可以接受的。如果您使用rauth并发现身份验证无法正常工作,您可能需要像这样禁用Bearer Auth:
s = service.get_auth_session('/some/resource',
data={'code': code},
bearer_auth=False)
来自规范:
[1]“客户端应该使用带有承载HTTP授权方案的授权请求头字段,使用承载令牌进行经过身份验证的请求。资源服务器必须支持此方法。”