这是我第一次尝试OAuth,所以如果我偏离了主题,或者完全走错了方向,请耐心等待。
我想写一个脚本,从basecamp 3中提取信息,格式化它,然后用电子邮件发送它。我已经在basecamp 2中这样做了,它工作得很好。但是basecamp 3不允许简单的身份验证。这只是一个每周通过cron运行一次的脚本。
我发现的大多数OAuth例子都需要获得一个授权URL,在浏览器中访问它,授予授权等,以便获得一个访问令牌。请告诉我有一个自动化的方法!我不能让这个过程变成一个手动过程。
我使用requests-oauthlib尝试了后端应用程序流(可在此处找到:https://requests-oauthlib.readthedocs.io/en/latest/oauth2_workflow.html#backend-application-flow)
我已经试过他们的例子几乎直接没有运气:
from oauthlib.oauth2 import BackendApplicationClient
from requests_oauthlib import OAuth2Session
ktclient_id = r'my-client-id'
ktclient_secret = r'my-client-secret'
ktredirect_uri = r'http://www.company.com/whatever'
client = BackendApplicationClient(client_id=ktclient_id)
oauth = OAuth2Session(client=client)
token = oauth.fetch_token(token_url=r'https://launchpad.37signals.com/authorization/token',
client_id=ktclient_id,
client_secret=ktclient_secret)
下面是我得到的错误:
Traceback (most recent call last):
File "./get-token.py", line 20, in <module>
client_secret=ktclient_secret)
File "/home/mwilson/.local/lib/python2.7/site-packages/requests_oauthlib/oauth2_session.py", line 244, in fetch_token
self._client.parse_request_body_response(r.text, scope=self.scope)
File "/home/mwilson/.local/lib/python2.7/site-packages/oauthlib/oauth2/rfc6749/clients/base.py", line 409, in parse_request_body_response
self.token = parse_token_response(body, scope=scope)
File "/home/mwilson/.local/lib/python2.7/site-packages/oauthlib/oauth2/rfc6749/parameters.py", line 376, in parse_token_response
validate_token_parameters(params)
File "/home/mwilson/.local/lib/python2.7/site-packages/oauthlib/oauth2/rfc6749/parameters.py", line 386, in validate_token_parameters
raise MissingTokenError(description="Missing access token parameter.")
oauthlib.oauth2.rfc6749.errors.MissingTokenError: (missing_token) Missing access token parameter.
我尝试在下面的行中指定redirect_uri
oauth = OAuth2Session(client=client, redirect_uri=ktredirect_uri)
我得到了同样的结果。有人在这方面有什么运气吗?basecamp 3还需要什么参数?
2条答案
按热度按时间dkqlctbz1#
Basecamp 3仅支持使用Web服务器的Oauth2身份验证,
您需要执行以下步骤:
1.向basecamp请求您的客户ID和客户密码,并获取访问代码
1.用您收到的访问代码交换访问令牌、刷新令牌和到期时间
你可以用一个 flask 或django应用程序来完成同样的任务。
1.您需要在https://launchpad.37signals.com/integrations上注册应用程序
1.对于django,你可以将重定向URL指定为localhost:8000/view_name
1.按照这些步骤得到的访问令牌可以用来通过api发出任何请求,通常访问令牌会持续一周或更长时间,直到你过度使用它。
Django应用程序示例:views.py:
将客户端重定向到basecamp身份验证站点,客户端将在该站点登录并通过basecamp授权您的web应用程序
假设指定为redirect的URL为:http://localhost:8000/app_name/get_token/,则用于获取访问令牌的视图将为:
wa7juj8i2#
在下面的线程中看到我的评论:Problem with Token URL for Basecamp 3 API
请注意,您需要一个webhook。不能从您的终端执行所有操作。