028.[轉] 認證、受權、鑑權和權限控制

認證、受權、鑑權和權限控制

html

web

 

目錄後端

  • 1. 認證
  • 2. 受權
  • 3. 鑑權
  • 4. 權限控制
  • 5. 認證、受權、鑑權和權限控制的關係
  • 6. 認證和鑑權的關係
  • 7. 小結
  • 8. 參考文獻

本文將對信息安全領域中認證、受權、鑑權和權限控制這四個概念給出相應的定義,並對這個概念之間的相互關係進行梳理。本文給出的概念定義將有助於後續文章中對互聯網應用開發用戶登陸功能的更多討論。瀏覽器

注:本文討論的互聯網應用開發,主要是指web應用和移動應用的開發。安全

1. 認證

認證是指根據聲明者所特有的識別信息,確認聲明者的身份。認證在英文中對應於identification這個單詞。服務器

最多見的認證明現方式是經過用戶名和密碼,但認證方式不限於此。下面都是當前常見到的認證技術,cookie

  • 身份證
  • 用戶名和密碼
  • 用戶手機:手機短信、手機二維碼掃描、手勢密碼
  • 用戶的電子郵箱
  • 基於時間序列和用戶相關的一次性口令
  • 用戶的生物學特徵:指紋、語音、眼睛虹膜
  • 用戶的大數據識別
  • 等等

爲了確認用戶的身份,防止僞造,在安全要求高的場合,常常會使用組合認證(或者叫多因素認證),也就是同時使用多個認證方式對用戶的身份進行校驗。session

2. 受權

簡單來講,受權通常是指獲取用戶的委派權限。在英文中對應於authorization這個單詞。ide

在信息安全領域,受權是指資源全部者委派執行者,賦予執行者指定範圍的資源操做權限,以便執行者代理執行對資源的相關操做。這裏麪包含有以下四個重要概念,post

  • 資源全部者,擁有資源的全部權利,通常就是資源的擁有者。
  • 資源執行者,被委派去執行資源的相關操做。
  • 操做權限,能夠對資源進行的某種操做。
  • 資源,有價值的信息或數據等,受到安全保護。

須要說明的是,資源全部者和執行者能夠是天然人,就是普通用戶,但不限於天然人。在信息安全領域,資源全部者和執行者,不少時候是應用程序或者機器。好比用戶在瀏覽器上登陸一個網站,那麼這個瀏覽器就成爲一個執行者,它在用戶登陸後獲取了用戶的受權,表明着用戶執行各類指令,進行購物、下單、付錢、轉帳等等操做。

同時,資源全部者和執行者能夠是分開的不一樣實體,也能夠是同一個。如果分開的二者,則資源執行者是以資源全部者的代理形式而存在。

受權的實現方式很是多也很普遍,咱們常見的銀行卡、門禁卡、鑰匙、公證書,這些都是現實生活中受權的實現方式。其實現方式主要經過一個共信的媒介完成,這個媒介不可被篡改,不可隨意僞造,不少時候須要受保護,防止被竊取。

在互聯網應用開發領域,受權所用到的授信媒介主要包括以下幾種,

  • 經過web服務器的session機制,一個訪問會話保持着用戶的受權信息
  • 經過web瀏覽器的cookie機制,一個網站的cookie保持着用戶的受權信息
  • 頒發受權令牌(token),一個合法有效的令牌中保持着用戶的受權信息

前面二者常見於web開發,須要有瀏覽器的支持。

3. 鑑權

鑑權是指對於一個聲明者所聲明的身份權利,對其所聲明的真實性進行鑑別確認的過程。在英文中對應於authentication這個單詞。

鑑權主要是對聲明者所聲明的真實性進行校驗。若從受權出發,則會更加容易理解鑑權。受權和鑑權是兩個上下游相匹配的關係,先受權,後鑑權。受權和鑑權兩個詞中的「權」,是同一個概念,就是所委派的權利,在實現上即爲授信媒介的表達形式。

所以,鑑權的實現方式是和受權方式有一一對應關係。對受權所頒發授信媒介進行解析,確認其真實性。下面是鑑權的一些實現方式,

  • 門禁卡:經過門禁卡識別器
  • 鑰匙:經過相匹配的鎖
  • 銀行卡:經過銀行卡識別器
  • 互聯網web開發領域的session/cookie/token:校驗session/cookie/token的合法性和有效性

鑑權是一個承上啓下的一個環節,上游它接受受權的輸出,校驗其真實性後,而後獲取權限(permission),這個將會爲下一步的權限控制作好準備。

4. 權限控制

權限控制是指對可執行的各類操做組合配置爲權限列表,而後根據執行者的權限,若其操做在權限範圍內,則容許執行,不然禁止。權限控制在英文中對應於access/permission control。

對於權限控制,能夠分爲兩部分進行理解:一個是權限,另外一個是控制。權限是抽象的邏輯概念,而控制是具體的實現方式。

先看權限(Permission),這是一個抽象的概念,通常預先定義和配置好,以便控制的具體實現。權限的定義,若簡單點,能夠直接對應於一個可執行的操做集合。而通常狀況下,會有基於角色的方式來定義權限,由角色來封裝可執行的操做集合。

若以門禁卡的權限實現爲例,上述兩種定義方式則能夠各自表達爲,

  • 這是一個門禁卡,擁有開公司全部的門的權限
  • 這是一個門禁卡,擁有管理員角色的權限,於是能夠開公司全部的門

能夠看到,權限做爲一個抽象的概念,將執行者和可具體執行的操做相分離。

在上文的討論中,鑑權的輸出是權限(Permission)。一旦有了權限,便知道了可執行的操做,接下來就是控制的事情了。

對於控制,是根據執行者的權限,對其所執行的操做進行判斷,決定容許或禁止當前操做的執行。現實生活中控制的實現方式,多種多樣,

  • 門禁:控制門的開關
  • 自行車鎖:控制車輪
  • 互聯網web後端服務:控制接口訪問,容許或拒絕訪問請求

5. 認證、受權、鑑權和權限控制的關係

認證、受權、鑑權和權限控制這四個環節是一個先後依次發生、上下游的關係,

認證-->受權-->鑑權-->權限控制

須要說明的是,這四個環節在有些時候會同時發生。 例如在下面的幾個場景,

  • 使用門禁卡開門:認證、受權、鑑權、權限控制四個環節一鼓作氣,在瞬間同時發生
  • 用戶的網站登陸:用戶在使用用戶名和密碼進行登陸時,認證和受權兩個環節一同完成,而鑑權和權限控制則發生在後續的請求訪問中,好比在選購物品或支付時。

不管怎樣,若從時間順序方面來看,這四個環節是按時間先後、依次相繼發生的關係

6. 認證和鑑權的關係

這兩個概念在不少時候是被混淆最多的概念。被混淆的主要緣由,如上文所述,不少時候認證、受權、鑑權和權限控制一同發生,以致於被誤解爲,認證就是鑑權,鑑權就是認證。

其實二者是不同的概念,二者都有對身份的確認過程,可是二者的主要區別在於,

  • 認證是確認聲明者的自己身份,其做爲受權的上游銜接而存在
  • 鑑權是對聲明者所聲明的真實性進行確認的過程,其做爲受權的下游銜接而存在

7. 小結

下面對本文討論的四個概念用一個表格進行小結,

  定義 英文 實現方式
認證 確認聲明者的身份 identification 根據聲明者獨特的識別信息
受權 獲取用戶的委派權限 authorization 頒發一個授信媒介,不可被篡改,不可僞造,受保護
鑑權 對所聲明的權限真實性進行鑑別的過程權限是一個抽象的邏輯概念,定義和配置可執行的操做,而控制是具體的實現方式,經過必定的方式控制操做的容許和禁止 authentication 鑑權和受權是一一對應關係,解析授信媒介,確認其合法性、有效性
權限控制 權限是一個抽象的邏輯概念,定義和配置可執行的操做,而控制是具體的實現方式,經過必定的方式控制操做的容許和禁止 access/permission control 實現方式多樣,根據具體狀況來實現。

8. 參考文獻

  1. 維基百科wiki - Identification
  2. 維基百科wiki - Authorization
  3. 維基百科wiki - Authentication
  4. 維基百科wiki – Access Control

 

《認證、受權、鑑權和權限控制》有2個想法

  1. Shane Hou說道:

    受權Authorization和權限控制Permission Control不是一樣的東西嗎?若是受權的時候已經有資源執行方和持有方參與,那這一步就應該要作權限控制了吧?

    好比我做爲遊客想要在你的博客上添加一篇博文,個人瀏覽器向你的博客系統發送認證信息,你的博客系統進行鑑權,確認我是個遊客,接下來判斷我要作的操做是添加一篇博文,可是因爲權限控制,我不能添加,所以拒絕。

    按個人理解,你說的這個流程應該應用於相似OAuth的第三方登陸場景,好比你的博客要獲取個人Github數據,所以要先跳轉至Github讓我點贊成,這一步是我(資源持有者)對你的博客系統的受權。

    1. pphh說道:

      從過程上,受權和權限控制是能夠分開的兩個階段,得到了受權並不必定就可以成功執行所得到權限容許的操做,好比說受權超時,雖然權限已頒發,可是若超時了就會變得無效,這個判斷是由權限控制來決定。權限控制是比較靈活的階段,除了根據客戶端發過來的受權信息,還能夠根據其它條件判斷是否能夠執行相應的操做,好比登陸的IP地址是否安全、是否長時間未登陸、是否在執行大風險的操做,如有風險的話,能夠進行追加鑑權操做,肯定該操做確實是由用戶所委派,等等

      這是一個一般的受權和權限控制流程,不只僅在OAuth,並且普通的用戶登陸、移動支付等場景也是如此。

      你給的博客登陸例子中,當認證你爲遊客後,瀏覽器中會保存你做爲遊客的受權記錄,在瀏覽器中執行的全部後續操做都會按照遊客的權限進行控制,這個控制其實發生在認證受權以後,而且在博客後端服務器所實現。

      你說的「權限控制」(即在受權時遊客角色的肯定),其實只是邏輯權限的頒發,仍是屬於受權,真正的控制發生在後續操做時是否被攔截或被容許。

相關文章
相關標籤/搜索