HTTP API 身份驗證和授權詳解
介紹
在用戶使用API發出請求之前,他們通常需要注冊API密鑰或學習其他方法來驗證請求。
API認證用戶的方式各不相同。有些API要求您在請求頭中包含一個API密鑰,而其他API則由于需要保護敏感數據、證明身份并確保請求不被篡改而需要精心設計的安全性。

二者定義
認證(authentication):指證明身份正確
授權(authorization):指允許某種行為
API可能會對您進行身份驗證,但不會授權您發出特定請求。

認證(authentication)
身份驗證是關于驗證您的憑據,如用戶名/用戶ID和密碼,以驗證您的身份。系統確定您是否就是您所說的使用憑據。在公共和專用網絡中,系統通過登錄密碼驗證用戶身份。身份驗證通常通過用戶名和密碼完成,有時與身份驗證因素結合使用,后者指的是各種身份驗證方式。

身份驗證因素決定了系統在授予訪問文件和請求銀行交易之外的任何內容之前驗證某人身份的各種要素。用戶的身份可以通過他所知道的,他擁有的或者他是什么來確定。在安全性方面,必須至少驗證兩個或所有三個身份驗證因素,以便授予某人訪問系統的權限。
身份驗證因素
單因素身份驗證
這是最簡單的身份驗證方法,通常依賴于簡單的密碼來授予用戶對特定系統(如網站或網絡)的訪問權限。此人可以僅使用其中一個憑據請求訪問系統以驗證其身份。單因素身份驗證的最常見示例是登錄憑據,其僅需要針對用戶名的密碼。
雙因素身份驗證
顧名思義,它是一個兩步驗證過程,不僅需要用戶名和密碼,還需要用戶知道的東西,以確保更高級別的安全性,例如ATM引腳,用戶知道。使用用戶名和密碼以及額外的機密信息,欺詐者幾乎不可能竊取有價值的數據。
多重身份驗證
這是最先進的身份驗證方法,它使用來自獨立身份驗證類別的兩個或更多級別的安全性來授予用戶對系統的訪問權限。所有因素應相互獨立,以消除系統中的任何漏洞。金融機構,銀行和執法機構使用多因素身份驗證來保護其數據和應用程序免受潛在威脅。
例如,當您將ATM卡輸入ATM機時,機器會要求您輸入您的PIN。在您正確輸入引腳后,銀行會確認您的身份證明該卡真正屬于您,并且您是該卡的合法所有者。通過驗證您的ATM卡引腳,銀行實際上會驗證您的身份,這稱為身份驗證。它只是確定你是誰,沒有別的。

JWT 認證介紹
JWT(JSON Web Tokens)是一個比較標準的認證解決方案,這個技術在Java圈里應該用的是非常普遍的。JWT簽名也是一種MAC(Message Authentication Code)的方法。
JSON Web Token 入門教程
簽名流程
- 用戶使用用戶名和口令到認證服務器上請求認證。
- 認證服務器驗證用戶名和口令后,以服務器端生成JWT Token,這個token的生成過程如下:
- 認證服務器還會生成一個 Secret Key(密鑰)
- 對JWT Header和JWT Payload分別求Base64。在Payload可能包括了用戶的抽象ID和的過期時間。
- 用密鑰對JWT簽名 HMAC-SHA256(SecertKey, Base64UrlEncode(JWT-Header)+'.'+Base64UrlEncode(JWT-Payload));
- 然后把 base64(header).base64(payload).signature 作為 JWT token返回客戶端。
- 客戶端使用JWT Token向應用服務器發送相關的請求。這個JWT Token就像一個臨時用戶權證一樣。
授權(authorization)
授權是確定經過身份驗證的用戶是否可以訪問特定資源的過程。它驗證您是否有權授予您訪問信息,數據庫,文件等資源的權限。授權通常在驗證后確認您的權限。簡單來說,就像給予某人官方許可做某事或任何事情。
對系統的訪問受身份驗證和授權的保護。可以通過輸入有效憑證來驗證訪問系統的任何嘗試,但只有在成功授權后才能接受。如果嘗試已通過身份驗證但未獲得授權,系統將拒絕訪問系統。
例如,驗證和確認組織中的員工ID和密碼的過程稱為身份驗證,但確定哪個員工可以訪問哪個樓層稱為授權。假設您正在旅行而且即將登機。當您在登記前出示機票和一些身份證明時,您會收到一張登機牌,證明機場管理局已對您的身份進行了身份驗證。但那不是它。乘務員必須授權您登上您應該乘坐的航班,讓您可以進入飛機內部及其資源。
Casbin 授權介紹
Casbin是一個強大的、高效的開源訪問控制框架,其權限管理機制支持多種訪問控制模型。
Casbin可以做到
- 支持自定義請求的格式,默認的請求格式為{subject, object, action}。
- 具有訪問控制模型model和策略policy兩個核心概念。
- 支持RBAC中的多層角色繼承,不止主體可以有角色,資源也可以具有角色。
- 支持超級用戶,如 root 或 Administrator,超級用戶可以不受授權策略的約束訪問任意資源。
- 支持多種內置的操作符,如 keyMatch,方便對路徑式的資源進行管理,如 /foo/bar 可以映射到 /foo*
小結
雖然這兩個術語經常相互結合使用,但它們的概念和含義完全不同。雖然這兩個概念對于Web服務基礎結構至關重要,特別是在授予對系統的訪問權限時,理解關于安全性的每個術語是關鍵。
雖然我們大多數人將一個術語與另一個術語混淆,但理解它們之間的關鍵區別很重要,實際上非常簡單。如果身份驗證是您的身份,則授權是您可以訪問和修改的權限。
簡單來說,身份驗證就是確定某人是否是他聲稱的人。另一方面,授權是確定他訪問資源的權利。
























