iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
Software Development

用Keycloak學習身份驗證與授權系列 第 5

Day04 - 【入門篇】淺談身份驗證與授權(2)

本系列文之後也會置於個人網站


實際上,在昨天已經將多數基礎都已經解釋過了,不過我想到還有一些東西可以再多做補充的。

對啦! 擔心彈藥不足,把一篇拆成兩篇來啦!?

沒有身份識別的存取控制

在我們拆分的整個流程中分成:身份識別、身份驗證、授權、存取控制。但現在,你將Web App登出後再登入一次,你會發現「授權」的部分不見了!
但我們不會立刻來討論這個部分。先來說說身份識別。

不覺得,身份識別在整個流程之中非常雞肋嗎?也就只是將你這個「自然人」與系統中存在的「帳號」對應起來。
也確實如此,在這樣的拆分中,身份識別對於存取控制並不是必要的。在後來已MAC爲基礎發展的存取控制框架,也多不直接與帳號相關。

別擔心,之後會提到什麼是MAC(強制存取控制, Mandatory Access Control)。

不過還有一個更直接沒了這個流程的例子。在以「單人使用」作爲設計的系統之中,我們只需要拿到鑰匙就可以進行存取。

什麼?你說現在還有這種系統嗎?其實還真不少呢,加密上鎖過的壓縮檔案,上鎖的部落格文章。還有授權之後的流程,可能也不包含身份識別。

此外,還有 你的手機 。他可以只設定PIN密碼、圖形密碼,而不需要輸入帳號,也可能不必要登入Google、Apple帳號。

雖然當今的手機系統裡,並不是只有一個帳號,但以使用習慣來說,它確實是以單人使用作爲設計的。
這也有些說明爲何他會是當今一個相當重要的工具。有相當多的二階段驗證(2FA)和手機有關聯,像是簡訊驗證、TOTP。

這並不是說非手機不可。但整個概念認爲,只有你的手機接收的到簡訊;只有你的手機存在TOPT的密鑰種子。
然後只有你會使用你的手機。

更多生活上的例子

生活上不乏有授權與存取控制的例子。

- 你把家鑰匙多拷貝幾份給家人(授權)。讓家人在回家的時候可以使用鑰匙開門(存取控制)。
- 你到了遊樂園售票臺購買了門票(授權)。在門口給驗票員後在手背上蓋了一個章(授權),他告訴你在某段時間內,依照這個章可以自由進出。然後你就進去遊玩了(存取)
  - 你遺忘了東西在車上。回到停車場,用車鑰匙將車門打開,拿去裏面東西(存取控制)。
  - 然後回到遊樂園門口。驗票員看了看你手背上的章,然後讓你通過(存取控制)。

零知識證明(Zero-Knowledge Proof)

接著是有點扯遠的題外話。

我覺得使用權杖(Token)存取的過程,很像是零知識證明(Zero-Knowledge Proof)的概念。

我知道我的密碼很重要,所以我不輕易使用我的密碼登入。現在我要存取系統,我必須像系統證明:我擁有正確的密碼。

而我身旁可能有人在觀察,所以我不能輕易使用我的密碼。所以在這之前,我跟系統約定好幾組使用過一次後就作廢的密碼(OTP, One Time Password)作爲登入。
系統在看到以後,將其標記然後放行讓我進入。

現在,我能夠證明我有正確的密碼。

a zero-knowledge proof or zero-knowledge protocol is a method by which one party (the prover) can prove to another party (the verifier) that they know a value x, without conveying any information apart from the fact that they know the value x.
零知識證明:在不暴露祕密x的情況下,證明自己知道x
-- wikipedia

舉個更通俗的例子:

我認識某個大明星A,我必須向我的朋友C證明我認識A。但我不能泄漏A的隱私。
一個簡單的做法就是打視訊給A,然後讓A與C通話。這樣一來C不會知道如何打給A,卻能夠相信我認識A。

或者一個經典的例子:

在一個環形通道的一次有一扇上鎖的門。我必須證明我有那門的鑰匙,我只需要從一邊進入,並且從另一邊出來就可以。

(只要能夠從A進入,B出來就說明我有門鑰匙)


參考資料


上一篇
Day03 - 【入門篇】淺談身份驗證與授權(1)
下一篇
Day05 - 【入門篇】什麼是Keycloak
系列文
用Keycloak學習身份驗證與授權39

尚未有邦友留言

立即登入留言