如何设置Twitter回调至obb以及开启Twitter应用的PIN授权?
一、设置Twitter回调至obb的方法
- 先进入Twitter开发者后台对应应用的设置页面,找到回调URL(Callback URLs)配置项,添加你的obb专用回调地址,格式为
obb://<自定义回调路径>,确保该回调scheme和你端内注册的唤起scheme完全一致 - 调整现有请求Request Token的代码,主动传入
oauth_callback参数,修改后的代码参考如下:
consumer = oauth2.Consumer(constants.consKey, constants.consSecret) client = oauth2.Client(consumer) # 新增oauth_callback参数指定obb回调地址 response, content = client.request(constants.requestUrl, 'POST', body={ "oauth_callback": "obb://your_custom_callback_path" }) requestToken = dict(urlparse.parse_qsl(content.decode('utf-8'))) print ('Enter the site:') print ('{}?oauth_token={}'.format(constants.authUrl, requestToken ['oauth_token']))
- 用户完成授权后,Twitter会自动唤起你配置的obb回调地址,同时带回授权所需的
oauth_verifier参数,你可以直接从回调地址的参数中提取该值用于后续换取Access Token。
二、Twitter应用启用PIN授权的方法
PIN授权属于OAuth 1.0a的带外(Out-of-band,简称OOB)授权流,适用于无法配置回调地址的桌面/无头应用场景,配置流程如下:
- 进入Twitter开发者后台对应应用的设置页面,找到回调URL配置项:如果只需要用PIN授权,可以删除所有已配置的回调URL,或者直接在请求Request Token时将
oauth_callback参数值固定为oob - 调整现有代码的Request Token请求逻辑,将
oauth_callback设为oob,修改后代码参考如下:
consumer = oauth2.Consumer(constants.consKey, constants.consSecret) client = oauth2.Client(consumer) # 指定oauth_callback为oob启用PIN授权 response, content = client.request(constants.requestUrl, 'POST', body={ "oauth_callback": "oob" }) requestToken = dict(urlparse.parse_qsl(content.decode('utf-8'))) print ('请访问以下地址完成授权:') print ('{}?oauth_token={}'.format(constants.authUrl, requestToken ['oauth_token'])) # 新增PIN码输入、换Access Token逻辑 pin = input("请输入授权页面显示的PIN码:") token = oauth2.Token(requestToken['oauth_token'], requestToken['oauth_token_secret']) token.set_verifier(pin) client = oauth2.Client(consumer, token) resp, access_content = client.request(constants.accessTokenUrl, 'POST') access_token = dict(urlparse.parse_qsl(access_content.decode('utf-8'))) # 后续就可以用access_token调用Twitter接口
- 配置完成后,用户跳转至授权页面完成授权后,不会跳转任何回调地址,而是直接显示一串数字PIN码,用户输入该PIN码到你的应用后即可完成授权流程。
注意事项
- 所有回调地址、权限配置需要和Twitter开发者后台的应用设置完全匹配,否则会出现授权失败的问题
- 请确保你使用的oauth2库版本支持OAuth 1.0a协议,避免参数校验不通过的问题
内容的提问来源于stack exchange,提问作者Jarek
相关产品推荐
相关产品推荐

