本想前段時間就把自己通過qq oauth1.0、oauth2.0協議進行驗證而實現qq登入的心得及demo例項分享給大家,可一直很忙,今天抽點時間說下oauth1.0協議原理,及講解下qq對於oauth1.0的認證開發。閒話多說了點,下面直接進入主題。
1、oauth的簡述
oauth(open authorization,開放授權)是為使用者資源的授權定義了乙個安全、開放及簡單的標準,第三方無需知道使用者的賬號及密碼,就可獲取到使用者的授權資訊,並且這是安全的。(我喜歡簡單明瞭,這裡沒看懂,沒關係,接著往下面看)
2、oauth的原理
(流程圖)
我在圖上分了四個步驟,下面是四步的講解:
第四步:授權後,第三方web即可訪問你剛才授權的資源資訊,比如:你的qq基本資訊-頭像、暱稱、性別等。
通過這個原理圖示及講解(圖是手工製作,有點草),相信大家都了解了oauth這個原理的乙個基本流程,若看不明白,你可以不用學習製作oauth了,開個玩笑。(這步後,大家知道什麼原理了,但還是無法知道oauth究竟是如何實現認證的,別急,接著往下看)
3、oauth 1.0的認證流程
在oauth 1.0認證中會用到三個重要的url:
第乙個:request token url,獲取未授權的token的url;
第二個:user authorization url,請求使用者對token進行授權的url;
第三個:request access url,使用token獲取access token的url。
上面是認證流程中用到的三個url,在下面的流程示意圖中會體現到,這是我講解oauth幻燈片的一頁,直接截圖下來進行講解:
第一步:**向認證平台請求乙個未授權的token,這個request token url是前面說的第乙個url;
第二步:跳轉至使用者授權頁面,提示使用者進行登入,並進行授權,返回獲得已授權的token,用到的user authorization url是前面說的第二個url;
4、qq oauth1.0認證中url的呼叫及引數的傳遞
4.1、請求未授權的臨時token
request token url(請求臨時token的url):
請求後,跳轉至引導使用者登入的url:
第乙個url請求引數包含如下內容:(紅色為必填、綠色為選填)
引數含義
oauth_consumer_key
oauth_nonce
隨機字串,所有oauth_nonce請使用int型值。
oauth_timestamp
oauth_version
版本號,請固定使用1.0
oauth_signature_method
簽名方法,請固定使用hmac-sha1。
oauth_signature
簽名值,用來提高傳輸過程引數的防篡改性。
簽名值的生成詳見【qq登入】簽名引數oauth_signature的說明
oauth_client_ip
使用者的ip位址(可選),int型
返回的引數有:oauth_token(臨時令牌)、oauth_token_secret(臨時金鑰對應的令牌)
第二個url需要傳遞的引數為:
引數含義
oauth_consumer_key
oauth_token
上一步中,得到的oauth_token
oauth_callback
返回的引數有:
引數含義
oauth_token
已授權的token
openid
oauth_signature
簽名值。如果**使用這一步返回的openid,則需要按規則生成簽名值,並與該簽名值比對,以驗證openid以及**的可靠性。
比對時生成簽名值的規則:使用hmac-sha1演算法,源串:openid+openid的timestamp(串中間不要新增'+'符號);金鑰:oauth_consumer_secret。
timestamp
openid的時間戳
oauth_vericode
授權驗證碼。
4.2、請求access token資料令牌
request access url(獲取access token請求url):
url請求引數包含如下內容:
引數含義
oauth_consumer_key
oauth_token
已授權的的token,上一步返回的oauth_token
oauth_nonce
隨機數oauth_timestamp
unix時間戳(從utc時間2023年1月1日00:00:00到當前時刻的秒數,不同語言中如何獲取請google/baidu之)
oauth_version
版本號,請固定使用1.0
oauth_signature_method
簽名方法,請固定使用hmac-sha1
oauth_signature
簽名值,用來提高傳輸過程引數的防篡改性。
簽名值的生成詳見【qq登入】簽名引數oauth_signature的說明
oauth_vericode
授權驗證碼,上一步返回的oauth_vericode
oauth_client_ip
使用者的ip位址(可選),int型
返回的引數如下:
引數含義
oauth_token
具有訪問許可權的access_token
oauth_token_secret
access_token的金鑰
openid
在第一步和本步驟中都返回了openid。使用本步驟返回的openid,更為安全
timestamp
openid的時間戳
oauth_signature
針對openid的簽名值
4.3、通過access token(資料令牌)呼叫api介面,獲取使用者授權資源
請求url: (這裡預設寫的是get_user_info介面)
請求引數:
引數含義
oauth_consumer_key
oauth_token
上一步返回的oauth_token
oauth_nonce
隨機數,int型
oauth_timestamp
unix時間戳(從utc時間2023年1月1日00:00:00到當前時刻的秒數,不同語言中如何獲取請google/baidu之)。
oauth_version
版本號,固定使用1.0
oauth_signature_method
簽名方法,固定使用hmac-sha1
oauth_signature
簽名值,用來提高傳輸過程引數的防篡改性。
簽名值的生成詳見【qq登入】簽名引數oauth_signature的說明
openid
上一步返回的openid。
oauth_client_ip
使用者的ip位址(可選),int型
好了,上面就是整個qq oauth1.0認證流程中url引數的請求與返回說明,這oauth1.0認證中,你會發現引數特別多,還有經過hmac-sha1加密、簽名等操作,特別麻煩、繁瑣,所以還是最好推薦使用oauth 2.0認證協議進行介面開發。
oauth_qq登入_公共返回碼說明:點選進入。
5、oauth2.0的認證流程
在oauth2.0的處理流程,主要分為以下四個步驟:
1)得到授權碼code
2)獲取access token
3)通過access token,獲取openid
4)通過access token及openid呼叫api,獲取使用者授權資訊
第一步:首先直接跳轉至使用者授權位址,即圖示 request user url ,提示使用者進行登入,並給予相關資源授權,得到唯一的auth code,這裡注意的是code只有10分鐘的有效期,對於安全考慮,相對於oauth 1.0省了一步獲取臨時的token,並且有效期也進行了控制,比1.0認證簡化了很多,並安全一些;
第二步:得到授權code後,這一步就是請求access token,通過 圖示 request access url ,生成得到資料token;
第三步:通過access token請求openid,openid是使用者在此平台的唯一標識,通過圖示 request info url 請求,然後得到openid;
最後,分享自己關於oauth1.0、2.0認證流程講解的幻燈片,結合文章來看,你會更容易理解。
OAuth 授權過程工作原理講解
sso與多平台登入 sso一般用於同一單位的多個站點的登陸狀態保持,技術上一般參考cas協議 多平台登入一般是oauth體系的協議,有多種認證模式但是不具備會話管理和狀態保持。不過從本質上講,我覺得兩者都是通過可信的第三方進行身份驗證,如果說同一單位的多個子系統共同只圍繞乙個第三方賬戶 可以稱為認證...
OAuth認證實現機制及單點登入原理
oauth認證是為了做到第三方應用在未獲取到使用者敏感資訊 如 賬號密碼 使用者pin等 的情況下,能讓使用者授權予他來訪問開放平台 主要訪問平台中的資源伺服器resource server 中的資源介面。其流程主要是 使用者首先要保持登入,即已認證通過的狀態 第三方應用請求使用者授權 我理解是彈出...
HTTP快取機制及原理
前言 http 快取機制作為 web 效能優化的重要手段,對於從事 web 開發的同學們來說,應該是知識體系庫中的乙個基礎環節,同時對於有志成為前端架構師的同學來說是必備的知識技能。但是對於很多前端同學來說,僅僅只是知道瀏覽器會對請求的靜態檔案進行快取,但是為什麼被快取,快取是怎樣生效的,卻並不是很...