瞭解第三方認證方式:OAuth與OpenID
一、常規認證
網站的常規認證方式,就是需要使用者在登陸的時候輸入使用者名稱密碼,再根據該使用者具體對應的許可權,檢視該使用者可以訪問的目錄及可以進行的功能。
在java程式設計領域,該方面的功能是可以通過shiro或者Spring Security來完成。都可以對使用者進行較為詳細的許可權控制。
二、第三方認證
OAuth與OpenID可以歸類為第三方認證方式,及對該使用者的認證通過非本服務進行認證。下面具體解釋這兩者的原理方式和區別。
1、OAuth
OAuth 是一個開放標準,允許使用者讓第三方應用訪問該使用者在某一網站上儲存的私密的資源(如照片,視訊,聯絡人列表),而無需將使用者名稱和密碼提供給第三方應用。目前,OAuth 的最新版本為 2.0。
OAuth 允許使用者提供一個令牌,而不是使用者名稱和密碼來訪問他們存放在特定服務提供者的資料。每一個令牌授權一個特定的網站(例如,你需要臨時訪問的網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相簿中的視訊)。這樣,OAuth 允許使用者授權第三方網站訪問他們儲存在另外的服務提供者上的資訊,而不需要分享他們的訪問許可或他們資料的所有內容。
2、OpenID
OpenID 系統的第一部分是身份驗證,即如何通過 URI 來認證使用者身份。目前的網站都是依靠使用者名稱和密碼來登入認證,這就意味著大家在每個網站都需要註冊使用者名稱和密碼,即便你使用的是同樣的密碼。如果使用 OpenID ,你的網站地址(URI)就是你的使用者名稱,而你的密碼安全的儲存在一個 OpenID 服務網站上(你可以自己建立一個 OpenID 服務網站,也可以選擇一個可信任的 OpenID 服務網站來完成註冊)。
OpenID僅僅做一個使用者認證的功能,不能拿到使用者的任何資訊,這樣往往在用在企業內部的不同服務之間較為常用。
三、通俗解釋
現在很多網站都可以用第三方的賬號登陸,比如,現在我要登入淘寶買東西,而如果我沒有淘寶的賬號,我也可以用微博的賬號登入,這個微博賬號就是第三方賬號了。
OpenID強調驗證(authentication),而OAuth強調授權(authorization)。 驗證就是說“我”是不是(微博使用者),而授權是說“淘寶”可不可以,而可不可以的前提則是“我”是不是。
過程大概是這樣:
我點開微博登入的連結,淘寶就跳到微博登入頁面,問我你是不是那個微博使用者,是的話你用你的賬號密碼去登入,你先去給微博驗明正身,是的話再來找我。
好啦,我屁顛屁顛輸入賬號跟密碼,如果可以登入說明我這個身份是對的,通過了微博的驗證後微博就告訴淘寶說,沒錯沒錯,我家裡確實有麼這個傢伙。
上面這些都是OpenID的責任,而且OpenID也只做這件事,就是前面說的是不是。
然後呢,淘寶就說好好,有你微博驗證我放心,於是就讓我通過了。
等等,這時淘寶只知道微博他們家有我存在,但是並不知道我在微博家裡叫什麼名,做過什麼事,其實淘寶也不應該知道,對吧,要是知道我在微博家老是到處舉報別人賣假貨坑顧客什麼的,那我讓你進我大淘寶豈不是會壞了我的大事,你丫是來搗亂的吧(至於淘寶為什麼會這麼想,哼哼~你們懂的)
所以,淘寶通常就會做一件事,什麼事呢?這時就輪到OAuth出場了,淘寶在把我交給微博驗明正身的時候其實還“忽悠“了我,明明只是驗個身份,卻問我要不要把我在微博家叫什麼名做過什麼事也告訴它(就是通常看到的幾個打勾選項:允許訪問我的暱稱/允許訪問我的頭像等等),淘寶說這樣就可以為我提供更多的服務,什麼服務呢?模凌兩可,我呢看到有更多服務也沒多想就打勾了,不要白不要是吧。
這裡就用到了OAuth,就是前面說的可不可以,這個要是真發現我在微博家幹過的事,會不會把我加入重點監控物件,那就要看淘寶有多少節操了
其實現在很多的第三方登入都是這樣,驗證身份的同時順便把你在其他地方的資料拿到手,名曰資料共享,其實共享一些非敏感資訊倒也無妨,還可以免去了每去一個新網站都要填寫一大堆重複資料的問題。但是我要吐槽的是,很多網站明明讓我用第三方賬號登入,你都OAuth了為毛登入後還要再填一遍郵箱暱稱之類的東西?早知道這樣我還不如直接在你這邊註冊就好了,在我看來這是使用者體驗的問題了。
四、參考文獻