基於 OAuth 安全性通訊協定的 Java 應用編程1

來源:互聯網
上載者:User

標籤:密碼   安全   oauth   

原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-oauth/index.html

參考部落格:http://www.cnblogs.com/wangkewei/archive/2011/01/14/1935858.html

OAuth 簡介
OAuth 是由 Blaine Cook、Chris Messina、Larry Halff 及 David Recordon 共同發起的,目的在於為 API 訪問授權提供一個安全、開放的標準。

基於 OAuth 認證授權具有以下特點:

  • 安全。OAuth 與別的授權方式不同之處在於:OAuth 的授權不會使消費方(Consumer)觸及到使用者的帳號資訊(如使用者名稱與密碼),也是是說,消費方無需使用使用者的使用者名稱與密碼就可以申請獲得該使用者資源的授權。
  • 開放。任何消費方都可以使用 OAuth 認證服務,任何服務提供者 (Service Provider) 都可以實現自身的 OAuth 認證服務。
  • 簡單。不管是消費方還是服務提供者,都很容易於理解與使用。
  • OAuth 的解決方案如所示。


1 所示 OAuth 解決方案中使用者、消費方及其服務提供者之間的三角關係:當使用者需要 Consumer 為其提供某種服務時,該服務涉及到需要從服務提供者那裡擷取該使用者的保護資源。OAuth 保證:只有在使用者顯式授權的情況下(步驟 4),消費方才可以擷取該使用者的資源,並用來服務於該使用者。

從宏觀層次來看,OAuth 按以下方式工作:
  1. 消費方與不同的服務提供者建立了關係。
  2. 消費方共用一個密碼短語或者是公開金鑰給服務提供者,服務提供者使用該公開金鑰來確認消費方的身份。
  3. 消費方根據服務提供者將使用者重新導向到登入頁面。
  4. 該使用者登入後告訴服務提供者該消費方訪問他的保護資源是沒問題的

在瞭解 OAuth 認證流程之前,我們先來瞭解一下 OAuth 協議的一些基本術語定義:

  • Consumer Key:消費方對於服務提供者的身份唯一標識。
  • Consumer Secret:用來確認消費方對於 Consumer Key 的擁有關係。
  • Request Token:獲得使用者授權的請求令牌,用於交換 Access Token。
  • Access Token:用於獲得使用者在服務提供者的受保護資源。
  • Token Secret:用來確認消費方對於令牌(Request Token 和 Access Token)的擁有關係。

OAuth 認證授權流程

  1. 消費方向 OAuth 服務提供者請求未授權的 Request Token。
  2. OAuth 服務提供者在驗證了消費方的合法請求後,向其頒發未經使用者授權的 Request Token 及其相對應的 Token Secret。
  3. 消費方使用得到的 Request Token,通過 URL 引導使用者到服務提供者那裡,這一步應該是瀏覽器的行為。接下來,使用者可以通過輸入在服務提供者的使用者名稱 / 密碼資訊,授權該請求。一旦授權成功,轉到下一步。
  4. 服務提供者通過 URL 引導使用者重新回到消費方那裡,這一步也是瀏覽器的行為。
  5. 在獲得授權的 Request Token 後,消費方使用授權的 Request Token 從服務提供者那裡換取 Access Token。
  6. OAuth 服務提供者同意消費方的請求,並向其頒發 Access Token 及其對應的 Token Secret。
  7. 消費方使用上一步返回的 Access Token 訪問使用者授權的資源。
總的來講,在 OAuth 的技術體系裡,服務提供者需要提供如下基本的功能:
  • 第 1、實現三個 Service endpoints,即:提供用於擷取未授權的 Request Token 服務地址,擷取使用者授權的 Request Token 服務地址,以及使用授權的 Request Token 換取 Access Token 的服務地址。
  • 第 2、提供基於 Form 的使用者認證,以便於使用者可以登入服務提供者做出授權。
  • 第 3、授權的管理,比如使用者可以在任何時候撤銷已經做出的授權。

而對於消費方而言,需要如下的準系統:

  • 第 1、從服務提供者擷取 Customer Key/Customer Secret。
  • 第 2、提供與服務提供者之間基於 HTTP 的通訊機制,以換取相關的令牌。
我們具體來看一個使用 OAuth 認證的例子
        在傳統的網站應用程式中,如果您想在網站 A 匯入網站 B 的連絡人清單,需要在網站 A 輸入您網站 B 的使用者名稱、密碼資訊。例如,您登陸 Plaxo (https://www.plaxo.com ),一個連絡人管理網站,當您想把 GMail 的連絡人清單匯入到 Plaxo,您需要輸入您的 GMail 使用者名稱 / 密碼, 所示:


在這裡,Plaxo 承諾不會儲存您在 Gmail 的密碼。

如果使用 OAuth 認證,情況是不同的,您不需要向網站 A(扮演 Consumer 角色)暴露您網站 B(扮演 Service Provider 角色)的使用者名稱、密碼資訊。例如,您登入 http://lab.madgex.com/oauth-net/googlecontacts/default.aspx 網站, :


點擊“Get my Google Contacts”,瀏覽器將會重新導向到 Google,引導您登入 Google,


登入成功後,將會看到圖


在您登入 Google,點擊“Grant access”,授權 lab.madgex.com 後,lab.madgex.com 就能獲得您在 Google 的連絡人清單。


在上面的的例子中,網站 lab.madgex.com 扮演著 Consumer 的角色,而 Google 是 Service Provider,lab.madgex.com 使用基於 OAuth 的認證方式從 Google 獲得連絡人清單。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

基於 OAuth 安全性通訊協定的 Java 應用編程1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.