有沒有必要在專案裡使用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 的應用場景