久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

OAuth的機制原理講解及開發(fā)流程

 quasiceo 2014-10-08

OAuth的機制原理講解及開發(fā)流程
分類: 技術(shù)文章 編程交流 2013-09-30 11:33 5166人閱讀 評論(4) 收藏 舉報

原文地址:http://kb.cnblogs.com/page/189153/

本想前段時間就把自己通過QQ OAuth1.0,、OAuth2.0協(xié)議進行驗證而實現(xiàn)QQ登錄的心得及Demo實例分享給大家,,可一直很忙,今天抽點時間說下OAuth1.0協(xié)議原理,,及講解下QQ對于Oauth1.0的認證開發(fā),。閑話多說了點,下面直接進入主題,。

  1,、OAuth的簡述

  OAuth(Open Authorization,開放授權(quán))是為用戶資源的授權(quán)定義了一個安全,、開放及簡單的標準,,第三方無需知道用戶的賬號及密碼,就可獲取到用戶的授權(quán)信息,,并且這是安全的,。(我喜歡簡單明了,這里沒看懂,,沒關(guān)系,,接著往下面看)

  2、OAuth的原理

                                                         (流程圖)

  我在圖上分了四個步驟,,下面是四步的講解:

  第一步:用戶訪問第三方網(wǎng)站,,比如:就是你需要使用QQ進行登錄的網(wǎng)站;

  第二步:你點擊QQ登錄后,,第三方網(wǎng)站將會連接并進行請求,,比如:你點擊登錄后,第三方網(wǎng)站會跳轉(zhuǎn)到QQ平臺,,提示你進行登錄,;

  第三步:你要進行授權(quán)第三方網(wǎng)站對你的信息訪問的一個權(quán)限,比如:當你QQ登錄成功后,,QQ會提示你,,是否授權(quán)第三方Web訪問你的用戶基本信息或其他的資源信息,這時你點擊授權(quán)即可;

  第四步:授權(quán)后,,第三方Web即可訪問你剛才授權(quán)的資源信息,,比如:你的QQ基本信息-頭像、昵稱,、性別等,。

  通過這個原理圖示及講解(圖是手工制作,有點草),,相信大家都了解了OAuth這個原理的一個基本流程,,若看不明白,你可以不用學(xué)習(xí)制作OAuth了,,開個玩笑,。(這步后,大家知道什么原理了,,但還是無法知道OAuth究竟是如何實現(xiàn)認證的,,別急,接著往下看)

  3,、OAuth 1.0的認證流程

  這里直接講解OAuth 1.0協(xié)議的認證機制(OAuth 2.0會在下一節(jié)中講述),,雖然現(xiàn)在很多平臺都是遵循OAuth 2.0,但還是有開放OAuth 1.0平臺的,,比如:新浪微博,、QQ1.0平臺等。

  在OAuth 1.0認證中會用到三個重要的Url:

  第一個:Request Token Url,,獲取未授權(quán)的Token的Url,;

  第二個:User Authorization Url,請求用戶對Token進行授權(quán)的Url,;

  第三個:Request Access Url,,使用Token獲取Access Token的Url。

  上面是認證流程中用到的三個Url,,在下面的流程示意圖中會體現(xiàn)到,,這是我講解OAuth幻燈片的一頁,直接截圖下來進行講解:

  第一步:網(wǎng)站向認證平臺請求一個未授權(quán)的Token,,這個Request Token Url是前面說的第一個Url,;

  第二步:跳轉(zhuǎn)至用戶授權(quán)頁面,提示用戶進行登錄,,并進行授權(quán),,返回獲得已授權(quán)的Token,用到的User Authorization Url是前面說的第二個Url,;

  第三步:通過已授權(quán)的Token,向認證平臺請求Access Token(數(shù)據(jù)令牌),用到的Request Access Url是前面說的第三個Url,,返回后到這步整個認證流程就結(jié)束了,,最后一步,是通過數(shù)據(jù)令牌等參數(shù),,調(diào)用接口獲取用戶信息,,不完全算認證的流程。(我喜歡簡潔明了,,認證流程就是這樣,,相信通過圖示及講解都能明白,若有不明白之處請留言)

  4,、QQ OAuth1.0認證中Url的調(diào)用及參數(shù)的傳遞

  前面講了OAuth1.0的機制原理及認證流程,,這篇文章著重講解QQ OAuth1.0認證中Url的調(diào)用、各參數(shù)的傳遞,、注意事項,。而因為現(xiàn)在QQ開發(fā)平臺上,已經(jīng)很少能找到OAuth1.0認證的說明開發(fā)文檔了,,采用新的2.0認證模式,,所以簡單講述Url請求與返回參數(shù)的傳遞,并沒有很詳細深入地講解,,有什么問題大家可留言給我,。

  4.1、請求未授權(quán)的臨時Token

  新建一個頁面為QQLogin.aspx,,用來請求臨時Token及跳轉(zhuǎn)到用戶授權(quán)頁,。下面是相關(guān)Url及參數(shù)介紹:

  Request Token Url(請求臨時Token的Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_request_token

  請求后,跳轉(zhuǎn)至引導(dǎo)用戶登錄的Url:http://openapi.qzone.qq.com/oauth/qzoneoauth_authorize

  第一個Url請求參數(shù)包含如下內(nèi)容:(紅色為必填,、綠色為選填)

參數(shù)含義
oauth_consumer_key申請QQ登錄成功后,,分配給網(wǎng)站的appid
oauth_nonce隨機字符串,所有oauth_nonce請使用int型值,。
oauth_timestampunix時間戳(從UTC時間1970年1月1日00:00:00到當前時刻的秒數(shù),,不同語言中如何獲取請google/baidu之)。

注意第三方服務(wù)器時間與騰訊服務(wù)器時間相差不能超過5分鐘,。

oauth_version版本號,,請固定使用1.0
oauth_signature_method簽名方法,請固定使用HMAC-SHA1,。
oauth_signature簽名值,,用來提高傳輸過程參數(shù)的防篡改性。

簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明

oauth_client_ip用戶的IP地址(可選),,int型

  返回的參數(shù)有:oauth_token(臨時令牌),、oauth_token_secret(臨時密鑰對應(yīng)的令牌)

  第二個Url需要傳遞的參數(shù)為:

參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid,。
oauth_token上一步中,得到的oauth_token
oauth_callback回調(diào)地址,,即登錄并授權(quán)后返回到你網(wǎng)站上的地址,。

  返回的參數(shù)有:

參數(shù)含義
oauth_token已授權(quán)的token
openid與APP通信的用戶key,它和QQ號碼一一對應(yīng),,訪問OpenAPI時必需,。

同一個QQ號碼在不同的應(yīng)用中有不同的OpenID。 

oauth_signature簽名值,。如果網(wǎng)站使用這一步返回的openid,,則需要按規(guī)則生成簽名值,并與該簽名值比對,,以驗證openid以及來源的可靠性,。

比對時生成簽名值的規(guī)則:使用HMAC-SHA1算法,源串:openid+openid的timestamp(串中間不要添加'+'符號),;密鑰:oauth_consumer_secret,。

timestampopenid的時間戳
oauth_vericode授權(quán)驗證碼。

  4.2,、請求Access Token數(shù)據(jù)令牌

  上一步中,,我們寫了一個回調(diào)地址,并順利得到一些參數(shù),,下面就是拿這些參數(shù)來進行下一步操作,,首先,得到數(shù)據(jù)令牌(只有拿到數(shù)據(jù)令牌才可以調(diào)用接口獲取用戶信息),。

  Request Access Url(獲取Access Token請求Url):http://openapi.qzone.qq.com/oauth/qzoneoauth_access_token

  Url請求參數(shù)包含如下內(nèi)容:

參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid
oauth_token已授權(quán)的的token,,上一步返回的oauth_token
oauth_nonce隨機數(shù)
oauth_timestampunix時間戳(從UTC時間1970年1月1日00:00:00到當前時刻的秒數(shù),不同語言中如何獲取請google/baidu之)
oauth_version版本號,,請固定使用1.0
oauth_signature_method簽名方法,,請固定使用HMAC-SHA1
oauth_signature簽名值,用來提高傳輸過程參數(shù)的防篡改性,。

簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明

oauth_vericode授權(quán)驗證碼,,上一步返回的oauth_vericode
oauth_client_ip用戶的IP地址(可選),int型

  返回的參數(shù)如下:

參數(shù)含義
oauth_token具有訪問權(quán)限的access_token
oauth_token_secretaccess_token的密鑰
openid

在第一步和本步驟中都返回了openid,。使用本步驟返回的openid,,更為安全

timestampopenid的時間戳
oauth_signature針對openid的簽名值

  4.3、通過Access token(數(shù)據(jù)令牌)調(diào)用API接口,,獲取用戶授權(quán)資源

  請求Url:http://openapi.qzone.qq.com/user/get_user_info (這里默認寫的是get_user_info接口
  請求參數(shù):

參數(shù)含義
oauth_consumer_key分配給網(wǎng)站的appid
oauth_token上一步返回的oauth_token
oauth_nonce隨機數(shù),,int型
oauth_timestampunix時間戳(從UTC時間1970年1月1日00:00:00到當前時刻的秒數(shù),不同語言中如何獲取請google/baidu之),。
oauth_version版本號,,固定使用1.0
oauth_signature_method簽名方法,,固定使用HMAC-SHA1
oauth_signature簽名值,用來提高傳輸過程參數(shù)的防篡改性,。

簽名值的生成詳見【QQ登錄】簽名參數(shù)oauth_signature的說明

openid上一步返回的openid,。
oauth_client_ip用戶的IP地址(可選),int型

  好了,,上面就是整個QQ OAuth1.0認證流程中Url參數(shù)的請求與返回說明,這OAuth1.0認證中,,你會發(fā)現(xiàn)參數(shù)特別多,,還有經(jīng)過HMAC-SHA1加密、簽名等操作,,特別麻煩,、繁瑣,所以還是最好推薦使用OAuth 2.0認證協(xié)議進行接口開發(fā),。

  下面這篇文章是QQ登錄制作過程中,,公共返回碼說明(包含1.0、2.0),,供大家參考,,看是哪個階段出錯,然后對癥下藥,,特別是參數(shù)的請求,、傳遞是否正確,還有一個參數(shù)順序,、簽名是否正確,,這四點弄好,相信這個東西自然就實現(xiàn)了,。

  OAuth_QQ登錄_公共返回碼說明:點擊進入,。

  最后將自己開發(fā)制作的OAuth 1.0源代碼分享給大家,代碼分享:點擊下載,。

  5,、OAuth2.0的認證流程

  在OAuth2.0的處理流程,主要分為以下四個步驟:

  1)得到授權(quán)碼code

  2)獲取access token

  3)通過access token,,獲取OpenID

  4)通過access token及OpenID調(diào)用API,,獲取用戶授權(quán)信息

  上面是流程的大概四個步驟,在下面的流程示意圖中會得到體現(xiàn),,這是我制作的一個幻燈片的流程圖(文章最后會附上制作的OAuth幻燈片分享給大家),,這里就直接截圖下來進行講解:

  第一步:首先直接跳轉(zhuǎn)至用戶授權(quán)地址,即圖示 Request User Url ,,提示用戶進行登錄,,并給予相關(guān)資源授權(quán),,得到唯一的Auth code,這里注意的是code只有10分鐘的有效期,,對于安全考慮,,相對于OAuth 1.0省了一步獲取臨時的Token,并且有效期也進行了控制,,比1.0認證簡化了很多,,并安全一些;

  第二步:得到授權(quán)code后,,這一步就是請求access token,,通過 圖示 Request access url ,生成得到數(shù)據(jù)Token,;

  第三步:通過Access Token請求OpenID,,OpenID是用戶在此平臺的唯一標識,通過圖示 Request info url 請求,,然后得到OpenID,;

  第四步:通過第二步得到的數(shù)據(jù)Token、第三步得到的OpenID及相關(guān)API,,進行請求,,獲取用戶授權(quán)資源信息。(我喜歡簡潔明了,,OAuth2.0認證流程就是這樣,,相信通過圖示及講解都能明白,若有不明白之處請留言)

  最后,,分享自己關(guān)于OAuth1.0,、2.0認證流程講解的幻燈片,結(jié)合文章來看,,你會更容易理解,。

  課件分享:點擊下載 (麻煩保留博主信息,謝謝)

主題推薦
新浪微博 源代碼 服務(wù)器 驗證碼 安全
猜你在找
游戲服務(wù)器集群設(shè)計思路
ajax發(fā)送cookie
Android通過soap2訪問webservice遇到HTTP request failed, HTTP status: 302的問題
~~~二進制文件操作~~~
mariadb-5.5安裝筆記
PHP面向?qū)ο笾貙懪c重載
后臺請求接口
“華為杯”蘇,、魯高校大學(xué)生程序設(shè)計大賽選拔賽暨東南大學(xué)第十屆程序設(shè)計競賽復(fù)賽總結(jié)
開放2013
[python網(wǎng)絡(luò)編程]DNS服務(wù)器
查看評論
4樓 孤劍 2014-06-11 20:50發(fā)表 [回復(fù)]
引用“spider119”的評論:提個意見,代碼下載不了,。

底部的代碼可以下載,,是其他的代碼嗎?
3樓 心好煩啊 2014-06-10 15:14發(fā)表 [回復(fù)]
提個意見,,代碼下載不了,。
2樓 心好煩啊 2014-06-10 15:06發(fā)表 [回復(fù)]
頂! 讓我明白了流程,!
1樓 liuhouer 2014-03-28 15:39發(fā)表 [回復(fù)]
  1. public static boolean isAuthCoded() {//審核code通過  
  2.         //虛擬封裝查詢start  
  3.           Client client = new Client();  
  4.           client.setClient_id("bruce");  
  5.           client.setClient_secret("jelly");  
  6.           client.setState("bsafe");  
  7.           client.setResponse_type("code");  
  8.           client.setScope("read info");  
  9.           Map<String,Client> query = new HashMap<String,Client>();  
  10.           query.put("client", client);  
  11.         //虛擬封裝查詢end  
  12.         if (json == null) {  
  13.             return false;  
  14.         } else if (!(json.getOauthMap().get("client_id").equals(query.get("client").getClient_id())  
  15.                 //&& json.getOauthMap().get("client_secret").equals(query.get("client").getClient_secret())   
  16.                 && json.getOauthMap().get("state").equals(query.get("client").getState())  
  17.                 && json.getOauthMap().get("scope").equals(query.get("client").getScope())  
  18.                 && json.getOauthMap().get("response_type").equals(query.get("client").getResponse_type())  
  19.                 && json.getOauthMap().get("redirect_uri") != null)) {  
  20.             return false;  
  21.         }  
  22.         return true;  
  23.     }  



    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多