Twitter oauth 第三方授權
本人在公司主要是web 方面工作,今天給大家講講花了2天時間弄的一個自動化授權Twitter的東西
先講講Twitter, 目前各大平臺都是使用oauth2 的協議進行認證了,但twitter目前主要還是使用的oauth協議,關於兩者的不同這裡不贅述了。
不懂授權流程的看看官方的流程解釋
OAuth Core 1.0 oauth.net
我來說說需要的東西:
consumer_key = **********************************
consumer_secret = ***********************
這兩個東西你建立應用的時候就會給
來講講這幾個url:
REQUEST_TOKEN_URL = ' https:// api.twitter.com/oauth/r equest_token '
ACCESS_TOKEN_URL = ' https:// api.twitter.com/oauth/a ccess_token '
AUTHORIZATION_URL = ' https:// api.twitter.com/oauth/a uthorize '
1.第一步 使用REQUEST_TOKEN_URL 構建其要的請求頭後傳送請求,獲取到oauth_token,和 oauth_token_secret ,這兩個東西很重要 ,
2. 把之前的oauth_token 做為AUTHORIZATION_URL 引數 傳送請求,此時此刻 Twitter的授權頁面出來了,填入使用者名稱密碼就會授權成功,然後回撥到你應用裡面指定的callback,此時此刻會返回兩個東西一個是之前的oauth _token 一個是oauth_verifier ,這個東西很重要
3. 拿著oauth_verifier 使用ACCESS_TOKEN URL 獲取使用者的access_ token 搞定了
注: 我只是簡單的講講大概流程,裡面涉及很多很多細節,如: 構建請求頭,生成簽名oauth_signature,使用雜湊演算法的東西,等等 ,如果有興趣給大家推薦給地址
twitter三方登入的實現 - m7_sky的個人空間 - 開源中國 my.oschina.net
注:這裡面有一些錯誤的東西,但是主要部分沒有問題,因為國內確實找不到這些東西大家將就看吧,記住原來差不多,加密方式沒問題。
如果大家自己構建請求頭引數等等很麻煩,我研究了2天才搞通,大家用的python,各種技能在身,話不多說,上程式碼,
# 1.py檔案 import time from selenium import webdriver def driver(user_name, password, user_id): driver = webdriver.Chrome(executable_path='/usr/bin/chromedriver') url = "https://127.0.0.1:8000/index?user_id={}&qk_username={}".format(user_id, user_name) driver.get(url) driver.add_cookie({"name": 'user_id', "value": user_id}) driver.find_element_by_id("username_or_email").send_keys(user_name) driver.find_element_by_id('password').send_keys(password) driver.find_element_by_id("allow").click() time.sleep(10) # driver.close() driver("******", "********", '1') # 傳賬號和密碼 1只是我模擬的我web的使用者id,傳遞過去方便儲存使用者的access_token # 2.py 檔案 from __future__ import print_function from requests_oauthlib import OAuth1Session REQUEST_TOKEN_URL = 'https://api.twitter.com/oauth/request_token' ACCESS_TOKEN_URL = 'https://api.twitter.com/oauth/access_token' AUTHORIZATION_URL = 'https://api.twitter.com/oauth/authorize' consumer_key = 'B8s3dItgudL1JVMrBuL886BCo' consumer_secret = 'NkA2XFWJ9U4JlrW2ilLncyOucI3ypwDQ9gT6i3IPIh6vPRdnxB' def get_auth_token(): oauth_client = OAuth1Session(consumer_key, client_secret=consumer_secret, callback_uri='https://127.0.0.1:8000/oauth2callback') resp = oauth_client.fetch_request_token(REQUEST_TOKEN_URL, ) url = oauth_client.authorization_url(AUTHORIZATION_URL, auth_callback='https://127.0.0.1:8000/oauth2callback') data = { "url": url, "oauth_token_secret": resp.get('oauth_token_secret') } return data def get_access_token(oauth_token, oauth_token_secret, pincode): oauth_client = OAuth1Session(consumer_key, client_secret=consumer_secret, resource_owner_key=oauth_token, resource_owner_secret=oauth_token_secret, verifier=pincode) try: resp = oauth_client.fetch_access_token(ACCESS_TOKEN_URL) except ValueError as e: raise 'Invalid response from Twitter requesting temp token: {0}'.format(e) print('''Your tokens/keys are as follows: consumer_key= {ck} consumer_secret= {cs} access_token_key= {atk} access_token_secret= {ats}'''.format( ck=consumer_key, cs=consumer_secret, atk=resp.get('oauth_token'), ats=resp.get('oauth_token_secret')))
檢視程式碼
class Index(View): def get(self, request): data = get_auth_token() oauth_token_secret = data['oauth_token_secret'] request.session['oauth_token_secret'] = oauth_token_secret request.session['user_id'] = request.GET.get("user_id") request.session['qz_username'] = request.GET.get("qk_username") return redirect(data['url']) class Callback(APIView): def get(self, request): b = request.query_params.get("oauth_verifier") c = request.query_params.get("oauth_token") oauth_token_secret = request.session["oauth_token_secret"] id = request.session["user_id"] qz_username = request.session['qz_username'] get_access_token(c, oauth_token_secret, b) # id = request.COOKIES.get("user_id",None) data = { "id": id, "qz_username": qz_username } # json.dumps(data) return Response(data=data)
這個就是自己搭建的web 然後使用自動化去授權,需求是什麼呢?
主要針對大量的Twitter號需要授權給你的應用,然後你應用在使用這些Twitter號幹事情
這裡在提一點
callback url 自己填自己的,這裡必須是https協議的地址,然後就是可以填“oob”,如果填的"oob"話,在授權的第二部他不會回撥到你應用,但是會生成一個pin碼的介面,你記住PIN碼在發起第三部請求就可以獲取access_token ,其實使用"oob"還比較簡單
如果大家有什麼不懂的地方可以提出了,然後就是有Gmail的授權問題也可以問我