這里的術語和概念在文檔中隨處可見,它將極大地簡化您對Shiro和安全性的理解。
由于使用了術語,安全性可能非?;靵y。通過澄清一些核心概念,我們將使生活更輕松,您將看到Shiro API如何很好地反映它們:
身份(Authentication)
驗證身份驗證是驗證主體身份的過程 - 基本上證明某人確實是他們所說的人。當身份驗證嘗試成功時,應用程序可以信任主題是保證應用程序期望的對象。
授權(Authorization)
授權(也稱為訪問控制)是確定是否允許用戶/主體做某事的過程。它通常通過檢查和解釋主體的角色和權限(見下文),然后允許或拒絕訪問所請求的資源或功能來完成。
密碼(Cipher)
密碼是用于執(zhí)行加密或解密的算法。該算法通常依賴于稱為密鑰的一條信息。并且加密根據密鑰而變化,因此如果沒有它,去除極其困難。
密碼有不同的變化。分組密碼適用于通常具有固定大小的符號塊,而流密碼則使用連續(xù)的符號流。Symmetric Ciphers使用相同的密鑰進行加密和解密,而Asymmetric Ciphers使用不同的密鑰。并且如果非對稱密碼中的密鑰不能從另一個密鑰導出,則可以共享一個密鑰,公開創(chuàng)建公鑰/私鑰對。
憑證(Credential)
A Credential是一條驗證用戶/ Subject的身份的信息。在驗證嘗試期間,一個(或多個)憑證與委托人一起提交,以驗證提交它們的用戶/主體實際上是關聯用戶。憑證通常是非常秘密的東西,只有特定的用戶/主體才會知道,例如密碼或PGP密鑰或生物特征屬性或類似機制。
這個想法是,對于委托人來說,只有一個人知道與該委托人“配對”的正確憑證。如果當前用戶/主題提供與系統(tǒng)中存儲的憑證匹配的正確憑證,則系統(tǒng)可以假設并相信當前用戶/主體確實是他們所說的人。信任程度隨著更安全的憑證類型(例如生物識別簽名>密碼)而增加。
加密算法(Cryptography)
密碼術是通過隱藏信息或將其轉換為無意義來保護信息免受不良訪問的做法,因此沒有其他人可以閱讀它。Shiro專注于密碼學的兩個核心要素:使用公鑰或私鑰加密數據的密碼,以及對密碼等數據進行不可逆轉加密的哈希(也稱為消息摘要)。
散列(Hash)
散列函數是將輸入源(有時稱為消息)單向,不可逆轉換為編碼散列值,有時稱為消息摘要。它通常用于密碼,數字指紋或具有底層字節(jié)數組的數據。
權限(Permission)
A權限,至少在Shiro解釋它時,是一個描述應用程序中的原始功能的聲明,僅此而已。權限是安全策略中的最低級別構造。它們僅定義應用程序可以執(zhí)行的“操作”。他們沒有描述“誰”能夠執(zhí)行這些操作。權限只是一種行為陳述,僅此而已。
一些權限示例:
打開一個文件
查看“/ user / list”網頁
打印文件
刪除'jsmith'用戶
主要(Principal)
甲主要是一個應用程序的用戶(對象)的任何識別屬性?!白R別屬性”可以是對您的應用程序有意義的任何內容 - 用戶名,姓氏,給定名稱,社會安全號碼,用戶ID等。這就是它 - 沒什么了不起的。
Shiro還引用了我們稱之為主體的主要原則。甲初級主要是唯一標識的任何主要主題在整個應用程序。理想的主要原則是用戶名或用戶ID,它是RDBMS用戶表主鍵。應用程序中的用戶(主題)只有一個主要主體。
域(Realm)
A Realm是一個可以訪問特定于應用程序的安全數據(如用戶,角色和權限)的組件。它可以被認為是特定于安全性的DAO(數據訪問對象)。Realm將這個特定于應用程序的數據轉換為Shiro理解的格式,因此無論存在多少數據源或您的數據可能是特定于應用程序的特性,Shiro都可以提供一個易于理解的主題編程API。
領域通常與數據源(例如關系數據庫,LDAP目錄,文件系統(tǒng)或其他類似資源)具有1對1的關聯。因此,Realm接口的實現使用特定于數據源的API來發(fā)現授權數據(角色,權限等),例如JDBC,文件IO,Hibernate或JPA或任何其他數據訪問API。
角色角色(Role)
的定義可能因您與之交談的人而異。在許多應用程序中,人們用它來隱含地定義安全策略,這是一個模糊的概念。Shiro更喜歡將Role解釋為一個命名的Permissions集合。就是這樣 - 聚合一個或多個權限聲明的應用程序唯一名稱。
這是一個比許多應用程序使用的隱式定義更具體的定義。如果您選擇讓您的數據模型反映Shiro的假設,您會發(fā)現在控制安全策略方面您將擁有更多的權力。
會話(Session)
A會話是與在一段時間內與軟件系統(tǒng)交互的單個用戶/主題相關聯的有狀態(tài)數據上下文。當主題使用應用程序時,可以從會話中添加/讀取/刪除數據,并且應用程序可以在必要時稍后使用此數據。當用戶/主題退出應用程序或由于不活動而超時時,會話終止。
對于熟悉HttpSession的人來說,Shiro 會話具有相同的用途,除非Shiro會話可以在任何環(huán)境中使用,即使沒有可用的Servlet容器或EJB容器也是如此。
主題(Subject)
一主題就是看中安全術語,基本上意味著應用程序用戶的特定安全“視圖”。主題并不總是需要反映人類 - 它可以表示調用您的應用程序的外部進程,或者可能是在一段時間內間歇性地執(zhí)行某些操作的守護程序系統(tǒng)帳戶(例如cron作業(yè))。它基本上是對應用程序執(zhí)行某些操作的任何實體的表示