1. 程式人生 > 其它 >有沒有必要在專案裡使用Oauth2,不為了技術而技術,你可能並不需要 OAuth2

有沒有必要在專案裡使用Oauth2,不為了技術而技術,你可能並不需要 OAuth2

本博文出處:https://blog.csdn.net/yangxiao_hui/article/details/107252437

 

 

OAuth2 是一個關於 授權 (Authorization)的網路標準,在網上已經有大量的資料來解釋,本文不再詳細解釋原理和規範的詳情。關於 Authorization 和 Authentication 的區別之後會寫另外一篇文章來分析。在此僅列兩個比較優質的解釋 OAuth2 原理的文章:

儘管如此,這裡還是描述一下 OAuth2 的使用場景,以便約定和明確一下角色方便後面敘述。

角色

  • A (twitter): 託管內容、搭建 OAuth2 服務、提供第三方登入接入;
  • C: twitter 的使用者,在 twitter 網站上產生內容;
  • B1 (medium.com): 希望 C 用 twitter 賬號來登入自己的網站,並且希望獲得 C 的 twitter 頭像和使用者名稱等基本資訊;
  • B2 (buffer.com): 希望 C 用 twitter 賬號登入 buffer.com 並編寫內容然後直接釋出到 twitter
  • B3 (twitterrific): twitter 的第三方 iOS 客戶端

使用場景

使用者 C 想要用自己的 twitter 的賬號登入 medium.com,或者想用 buffer.com 來管理 twitter 的內容,或者想用 twitterrific 來刷推。但是這三個情況 使用者 C 都不希望把自己的 twitter 使用者名稱和密碼直接交給 B,而是希望 twitter 和 B 之間通過某種協商,給 B 相應的許可權。

需要多少許可權是 B 在 twitter 的開放平臺上設定的,是不是把這些許可權(或者給部分許可權)給 B 是使用者 C 自己決定的,而且這個決定的操作(授權)是在 twitter 的網站或者官方 APP 裡進行的。

在使用者覺得某個 B 不值得信任的時候,在 twitter 的賬號管理介面可以撤銷對它的授權。或者當 twitter 發現某個 B 有違規操作的時候,可以完全禁止 B 獲得授權。

OAuth2 就能滿足以上的授權需求。

搭建 OAuth2 服務(擔任 A)

什麼時候需要自己搭建 OAuth2 服務呢?一般來說兩種情況:

  • 作為 twitter、Facebook、微信、QQ 這種有完善的使用者系統、在網際網路佔到了基礎設施級別的使用者量,開放給其他網站做社交媒體登入;
  • 作為 reddit 這種論壇網站,或者微博、twitter 這種社交媒體,開放給第三方開發客戶端或者擴充套件應用。這種網站的特點是:本身是功能比較豐富,

接入 OAuth2 服務(擔任 B)

什麼時候需要接入別人提供的 OAuth2 服務呢?跟上面的擔任 A 相對應的兩種情況:

  • 自己的網站想要使用者使用 twitter、Facebook、微信、QQ 來登入,讓使用者跳過繁瑣的註冊過程,提高轉化率;
  • 想要為 reddit、微博、twitter 之類的網站開發客戶端或者擴充套件應用。

不需要 OAuth2 的場景

總的來說,任何用來做 認證(Authentication)的場景都不適合用 OAuth,比如:

  • 只有一套使用者系統的時候:用常規的使用者名稱密碼模式或者聯合身份等就夠了。
  • 有多套使用者系統,但是這個數量是有限的而且是受控制的,比如同一家公司的幾個子產品之間有不同的使用者系統,但是希望能把這些使用者打通:這就是典型的 Single Sign On 的應用場景