1. 程式人生 > >Oauth2.0和Oauth1.0的區別

Oauth2.0和Oauth1.0的區別

最近研究論壇裡那個微薄驗證授權的程式碼:終於看懂了不過到官方網站一下,原來是一代oauth認證。不過也好,二代簡單了。呵呵。
* OAuth2.0不需要簽名了。之前所有的複雜的signatureBaseString計算、appSecret、 tokenSecret什麼的都成浮雲了,現在所有請求不需要簽名了。所有二版微博API都使用HTTPS了。

* 相對於1.0的Request_Token換Authorization_Code,Authorization_Code再換Access_Token的授權模式,2.0提供了一種更簡潔給力的授權碼方式:Authorization_Code直接換Access_Token模式。

所以OAuth2.0的登入API只有兩個oauth2/authorize和oauth2/accesstoken。其實之前之所以要多一個獲取Request_Token的步驟,主要是為了Server來認證Client(還記得申銀萬國嗎),看client是不是一個合法的註冊過的Client。

* 當然OAuth2.0不止一種授權模式,共有四種, 新浪微博實現了最主要的3種:授權碼式、使用者名稱密碼式、隱藏式。
授權碼式就是上面提到Authorization_Code直接換Access_Token模式,登入需兩步。
使用者名稱密碼式可實現一步登入(當然前提是使用者得信任你的app才會乖乖給你密碼)。
隱藏式也是一步登入,適用於JavaScript等指令碼語言做邏輯處理的web客戶端。


* OAuth2.0裡的Access_Token與1.0裡的不同。1.0裡包含3個欄位: UserID, AccessToken, AccessTokenSecret。2.0裡也包含3個欄位: AccessToken(根據網友"U點意思"提供的情報,2.0的Access_Token欄位,每次返回的值不一樣。這與1.0中Access_Token欄位值永遠不變,是個很大的區別)
ExpiresIn(AccessToken的過期時間,按秒計,很短,預設可能是1個小時)
RefreshToken (AccessToken過期時,用來獲取新的AccessToken,具體做法是當使用AccessToken時收到類似TokenInvalid或者TokenExpired的錯誤時,呼叫oauth2/accesstoken介面傳遞RefreshToken以獲取新的AccessToken)


* OAuth2.0引入了Authorization Server的概念(越來越像微軟的WIF-Window Identity Model)。對於我們開發者而言,沒必要區分Authorization Server和Resource Server,我們看到的就是新浪微博Server。

* 使用OAuth2.0訪問新浪微博API更簡單了,只需要傳遞一個AccessToken值

*所有API只返回Json格式了,沒有XML格式的了。(這是為蝦米)


1、2.0的使用者授權過程有2步,

         A)引導使用者到授權伺服器,請求使用者授權,使用者授權後返回 授權碼(AuthorizationCode)

         B)客戶端由授權碼到授權伺服器換取訪問令牌(access token)

         C)用訪問令牌去訪問得到授權的資源

         1.0的授權分3步,

         A)客戶端到授權伺服器請求一個授權令牌(request token&secret)

         B)引導使用者到授權伺服器請求授權

         C)用訪問令牌到授權伺服器換取訪問令牌(access token&secret)

         D)用訪問令牌去訪問得到授權的資源

四、       Oauth1.0Oauth2.0的區別

auth1.0與Oauth2.0是相互不相容的,所以他們為我們提供了不同的授權方式:

2.0的使用者授權過程有3步:

         A)使用者到授權伺服器,請求授權,然後返回授權碼(AuthorizationCode)

         B)客戶端由授權碼到授權伺服器換取訪問令牌(access token)

         C)用訪問令牌去訪問得到授權的資源、

總結:獲取授權碼(Authorization Code)—>換取訪問令牌(access_token)—>訪問資源:

1.0的授權分4步,

          A)客戶端到授權伺服器請求一個授權令牌(requesttoken&secret)

         B)引導使用者到授權伺服器請求授權

         C)用訪問令牌到授權伺服器換取訪問令牌(accesstoken&secret)

         D)用訪問令牌去訪問得到授權的資源

總結:請求授權令牌(request token&secret)—>換取訪問令牌(access token&secret)—>訪問資源

1.0協議每個token都有一個加密,2.0則不需要。這樣來看1.0似乎更加安全,但是2.0要求使用https協議,安全性也更高一籌。

2.0充分考慮了客戶端的各種子態,因而提供了多種途徑獲取訪問令牌,有:授權碼、

客戶端私有證書、資源擁有者密碼證書、重新整理令牌等方式,而且驗證過程更為簡潔。

相比之下 1.0只有一個使用者授權流程。

相關推薦

Oauth2.0Oauth1.0區別

最近研究論壇裡那個微薄驗證授權的程式碼:終於看懂了不過到官方網站一下,原來是一代oauth認證。不過也好,二代簡單了。呵呵。* OAuth2.0不需要簽名了。之前所有的複雜的signatureBaseString計算、appSecret、 tokenSecret什麼的都成浮

django1.0django2.0的基於正則表達式的url區別

正則 url django1.0 django2.0django1.0和django2.0的基於正則表達式的url區別

select count(0) count(*)的區別

follow 包括 column rake sele blog 只有一個 tar 自動 一般情況下,Select Count ()和Select Count(1)兩著返回結果是一樣的,MySql會自動將select count()轉為 select count(0). 假如

我的mqtt協議和emqttd開源專案個人理解(25) - 協議裡面Clean Session為01的區別

一、基本概念 Session 會話 定義 定義:某個客戶端(由ClientID作為標識)和某個伺服器之間的邏輯層面的通訊 生命週期(存在時間):會話 >= 網路連線 CleanSession 標記 在Connect時,由客戶端設定  0 —

vue3.02.0區別及專案的搭建

  3.0 新加入了 TypeScript 以及 PWA 的支援 部分命令發生了變化: 下載安裝  npm install -g [email protected] 刪除了vue list 建立專案&n

selenium 1.0、selenium2.0selenium3.0區別

selenium 1.0 RC幾個核心組成部分: RC Server - jar ,主要負責跟瀏覽器打交道 RC Client -jar,一系列jar包,主要用來寫測試用例 RC core -javascript ,由RC Server注入到瀏覽器的selenium 核心主要操作控制元件 這裡RC的

C指標(*++argv)[0]*++argv[0]的區別

*argv[]在linux系統中是輸入引數的集合,其中argv[0]指向呼叫的程式名稱,後面才是使用者輸入的引數; 那 ( *++argv)[0]和*++argv[0]表達的是什麼意思呢? 其實他們有自己特定的意義。 先對他們進行分析,根據結合性,[]的優先順序要大於*和++, *和++

Camera1.0Camear2.0區別

1. Camera2是通過系統服務拿到CameraManager來管理camera裝置物件,camera的一次預覽、拍照都是向請求會話(CaptureSession.StateCallback,攝像頭開啟時由相機裝置的輸出surface組成)傳送一次請求(CaptureRequest.Builder)。需

Hadoop1.0Hadoop2.0區別

文章轉載自「開發者圓桌」一個關於開發者入門、進階、踩坑的微信公眾號 什麼是Hadoop1.0? Hadoop1.0即第一代Hadoop,指的是版本為Apache Hadoop 0.20.x、1.x或者CDH3系列的Hadoop,核心主要由HDFS和MapReduce

對比android6.05.0區別

對於android開發程式來說時刻關注android的更新換代是必不可少的,多了哪些功能又給開發者留了哪些坑是我們必須知道的;那麼android6.0(API23)相對5.0有那麼更加明顯的又是呢:首先是視覺美觀上就上了一個檔次,執行速度上瀏覽網頁等都提升了一個

HTTP詳解(3)-http1.0 http1.1 區別

翻了下HTTP1.1的協議標準RFC2616,下面是看到的一些它跟HTTP1.0的差別。 1. Persistent Connection持久連線        在HTTP1.0中,每對Request/Response都使用一個新的連線。         HTTP

安卓8.07.0有什麼區別 8.0系統新功能盤點[安卓中文網]

Android和iOS的系統霸主之爭已經打了好幾年,在前不久iOS剛剛釋出了第11個版本,而安卓也同樣做好了回擊的準備,準備在近期正式推送Android O系統,也就是我們常說的安卓8.0。雖然國產手機不會直接使用Android的原生系統,但那些國產手機推出的定

hdfs1.02.0復習

sla 系統配置 一致性 slaves 負責 們的 -m 檢測 hadoop2.0 1、Namenode元數據兩種映射:(1)文件名 -> block數據塊的映射(2)block數據塊 -> datanode節點地址的映射細節:(1)是持久化到NN的磁盤的(fs

Shader-AlphaTest(1.02.0

所謂Alpha測試,就是指測試畫素點的a值,只有當該畫素點的a值符合要求時,才渲染該畫素,否則不渲染該畫素. 首先來看1.0版本: Shader "Custom/AlphaTest" { Properties { _MainTex ("Texture", 2D) = "white

VUE CLI 3.02.0的引入模組的一些改變

1.引入模組一定要加.vue 剛剛接觸vue cli 3.0 自己開發中引入模組遇到一些問題。 因為2.0中 引入模組的字尾可以不用.vue.字尾 在3.0中就會出現 下圖的 錯誤 提示你 未找到模組。     加了.vue字尾之後模組之後. 再次執行 npm run s

Android camera framework7.06.0 主要差異

目前差異主要體現在介面封裝和程序分離方面。 1.程式碼結構 1).android6.0程式碼   目前Android6.0的程式碼,本地沒有原始碼,這裡就拿伺服器上版本了。可以發現在Android6.0上,介面都是在native層以原始碼方式實現了。由於以I開頭的檔案都具有b

OpenCV中MatIplImage之間的相互裝換(OpenCV2.0OpenCV3.0

Mat是OpenCV和C++介面的矩陣類,IplImage是OpenCV和C語言介面的結構體。 Mat讀取顯示用的是imread、imshow等,IplImage讀取顯示用的是cvLoadImage()、cvShowImage()。 有時候會涉及到兩者之間的轉換,下面詳細見介紹一下兩者之

Android App相容8.09.0

Android在8.0限制了後臺服務這些,啟動後臺服務需要設定通知欄,使服務變成前臺服務。但是在9.0上,就會出現Permission Denial: startForeground requires android.permission.FOREGROUND_SERVICE。 解決辦法

Retrofit2.0RxJava2.0的簡單封裝

一、首先新增專案依賴: implementation "com.squareup.okhttp3:logging-interceptor:$var.loggingInterceptor"

android8.09.0適配的一些問題

1.懸浮窗windowmanager許可權問題 需要跳轉到對應的系統許可權管理處讓使用者自己勾選 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { // 進入設定系統應用