以前就在新浪微博中建立了一個應用,得到了 App key 和 Secret key 以便去調用新浪微博開放平臺 API學習一下究竟是怎樣一回事。前幾天連續4天沒課,算是比較耐心地去嘗試弄明白怎樣使用 API 。 html
雖然新浪微博開放平臺中提供各類語言版本的開發 SDK 下載,也各自附有一些基本接口調用的 Demo 和接口說明文檔。可是這幾天的耐心嘗試以後,感受新浪微博開放平臺上的入門指導和下載到的 Java 開發包 weibo4j 包裏面的 Demo 使用註釋有些不一致。再加上自身領悟能力有限,致使遇到好些摸不着頭腦的難題。不過幸虧沒有放棄去嘗試弄懂它。廢話少說,下面是我學習的過程。 java
想要經過調用新浪微博開放平臺 API 開發本身的微博應用,第一步是擁有sina 微博帳號和CSDN 帳號,由於咱們要同時用這兩個帳號建立微博應用,以此得到 App key 和 Secret key 。那 App key 和 Secret key 有什麼用? 編程
其實我單單看了sina 微博開放平臺的一系列說明都不怎麼理解App key 和 Secret key 有啥用。由於更加重點是必須理解 OAuth 認證、受權的整個流程,以及在整個OAuth 認證、受權流程中好幾個 Token 、4個 URL的做用。 瀏覽器
剛開始遇到徹底沒個概念的 OAuth 時,覺得就沒戲學習不下去了。好在搜到下面這些文章,對於理解 OAuth 很是有幫助,連接以下: 安全
OAUTH協議簡介
在 OAuth 中有3個參與者,分別是 User 、Service Provider 、Consumer 。假設我要開發一個基於 sina 微博開放平臺的應用(App),供其餘 sina 微博用戶使用。它們的對應關係以下: 學習
User => 想要使用此App的sina微博用戶
Provider => sina微博開放平臺
Consumer => App spa
其實咱們這個 App 對於 User 和 Provider(sina微博平臺)來講,至關於一個第三方應用。做爲第三方的 App 想要訪問 User保存於 sina微博平臺中的資源,確定必須通過一系列認證和受權以後纔可以行得通。
下面是基於我對整個 OAuth 認證、受權流程的理解畫成的圖(能夠看一下跳過,當對後面的一些概念有必定理解以後再回頭看看這流程圖):
結合上面的流程圖,下面是我對這些術語的理解以及各個流程的描述:
Consumer key 、Consumer Secret :在sina 微博開放平臺分別稱爲 App key、Secret key。Consumer向 Provider 申請但願可以調用其開放 API,申請經過後由 Provider 分配給符合其要求的 Consumer ,用於惟一標識該 Consumer 符合 Provider 的要求。
對應於上圖的流程 1 和 2。
Request Token 、Request Secret :當 User 訪問 Consumer 並但願可以得到其特殊服務,該服務由 Consumer 對 User 自身存放在 Provider 中的資源進行整合操做以後返回。此時 Consumer 向 Provider 請求得到 Requst Token,用於惟一標識該 Consumer 與該 User 的特定關聯。
對應於上圖的流程 3 、4 、5。
至流程 6 ,Consumer 必須把 User 引導到Provider所提供的 OAuth 認證、受權頁面,其實就是瀏覽器重定向到附加有 Request Token 和 Request Secret 參數的 authenticationURL。該 URL 由 Provider 提供。
接下來流程 7 和 8 中 User 受權該 Consumer(通常是經過輸入帳號、密碼登陸而已),則 Provider 將重定向到流程 1 中 Consumer 提供的 Callback_URL ,而且在該 URL 參數中附加了 OAuth Token 和OAuth Verifier 。
流程 9 是 Consumer 經過以前已從 Provider 那裏獲取來的 Request Token 再次請求 Provider 以獲取 Access Token 。
Access Token 、 Access Secret :若流程 10 中 Provider 返回一個未經 User 受權的 Access Token ,它用於惟一標識特定 Consumer 能夠訪問某 User 存放在 Provider 中的資源、信息。那麼 Consumer 就能夠開始使用獲取到的 Access Token 和 Access Secret 訪問對應 User 存放在 Provider 中的資源。
通過流程 11 中對 User 信息的整合、操做以後,就能夠將特定的服務結果返回給 User 了。
經過上面對於 OAuth 流程的理解,咱們知道其實 User 徹底沒有將本身登陸 Provider 所需的帳號、密碼等泄露給第三方的 Consumer 。同時 User 又能使用到 Consumer 的特殊服務。真是很巧妙的而又安全的操做流程啊!
此外,上圖中 Consumer 有 3 次與 Provider 發出不一樣的請求,其實就是由 Provider 提供 3 個不一樣做用的 URL 給 Consumer 訪問。在 sina 微博開放平臺中這 3 個 URL 的截圖以下:
小結:
1、以上對於 OAuth 的流程理解很是有可能存在誤解,由於我更多的是根據 sina 微博開發包 weibo4j 中的代碼的理解,以及動手作測試總結出來的。固然,上面那些文章包括 sina 微博的部分 API 文檔我都看了好幾遍了…但願若發現錯誤,請指正一下,謝謝!
2、光是一些理論知識的理解還不夠,要動手操做實現一下,下一篇文章應該就會給出實際代碼了。