Apache Shiro 术语

请只花 2 分钟阅读并理解它-这确实很重要。真。这里的术语和概念在文档中到处都有提及,它将极大地简化您对 Shiro 和安全性的总体理解。

由于使用了术语,因此安全性确实令人困惑。通过阐明一些核心概念,我们将使生活更轻松,并且您将看到 Shiro API 很好地反映了它们:

  • Authentication
    身份验证是验证主体身份的过程-本质上是证明某人确实是他们所说的真实身份。身份验证尝试成功后,应用程序可以相信可以保证主题是应用程序期望的对象。

  • Authorization
    授权,也称为访问控制,是确定是否允许用户/主题做某事的过程。通常,通过检查和解释主体的角色和权限(请参见下文),然后允许或拒绝对请求的资源或功能的访问来完成此任务。

  • Cipher
    密码是用于执行加密或解密的算法。该算法通常依赖于一条称为密钥的信息。而且加密因密钥而异,因此如果没有密钥,解密将非常困难。

密码有不同的变化。块密码器处理通常具有固定大小的符号块,而流密码器处理连续的符号流。对称密码使用相同的密钥进行加密和解密,而非对称密码使用不同的密钥。而且,如果不能从另一个密钥中推导出非对称密码中的密钥,则可以公开共享一个密钥,从而创建公用/专用密钥对。

  • Credential
    凭据是一条信息,用于验证用户/主题的身份。在身份验证尝试期间,将一个(或多个)凭据与主体一起提交,以验证提交凭据的用户/主题实际上是关联的用户。凭证通常是只有特定用户/主体才能知道的非常机密的事物,例如密码或 PGP 密钥或 bioFeature 或类似机制。

这个想法是,对于一位校长,只有一个人会知道与该校长“配对”的正确凭证。如果当前用户/主题提供的正确凭据与系统中存储的凭据相匹配,则系统可以假定并相信当前用户/主题确实是他们所说的真实身份。信任程度会随着凭据类型的安全性提高(例如 bioFeature 签名>密码)而增加。

  • Cryptography
    密码学是一种通过隐藏信息或将其转换为废话来保护信息免遭不希望的访问的做法,其他人都无法阅读。 Shiro 专注于密码学的两个核心要素:使用公钥或私钥对诸如电子邮件之类的数据进行加密的密码,以及不可逆地对诸如密码之类的数据进行加密的哈希(即消息摘要)。

  • Hash
    哈希函数是将 Importing 源(有时称为消息)单向,不可逆地转换为编码的哈希值(有时称为消息摘要)的不可逆转的过程。它通常用于密码,数字指纹或具有基础字节数组的数据。

  • Permission
    权限,至少按照 Shiro 的解释,是一种描述应用程序中原始功能的语句,仅此而已。权限是安全策略中最低级别的构造。它们仅定义应用程序可以执行的“操作”。他们没有描述“谁”能够执行这些动作。许可只是行为的声明,仅此而已。

权限的一些示例:

  • 开启 Files

    • 查看“ /用户/列表”网页

    • Print documents

    • 删除“ jsmith”用户

  • Principal
    • Principal *是应用程序用户(主题)的任何标识属性。 “标识属性”可以是对您的应用程序有意义的任何内容-用户名,姓氏,给定名称,社会保险号,用户 ID 等。仅此而已-没什么疯狂的。

Shiro 还引用了我们称为Subject的* primary *主体的内容。 * Primary *主体是在整个应用程序中唯一标识Subject的任何主体。理想的主要主体是诸如用户名或用户 ID 之类的东西,后者是 RDBMS 用户表的主键。应用程序中的用户(主题)只有一个主要主体。

  • Realm
    领域是可以访问特定于应用程序的安全性数据(例如用户,角色和权限)的组件。可以将其视为特定于安全性的 DAO(数据访问对象)。 Realm 将此特定于应用程序的数据转换为 Shiro 可以理解的格式,因此 Shiro 可以反过来提供单个易于理解的 Subject 编程 API,无论存在多少数据源或您的数据有多少特定于应用程序。

领域通常与数据源(例如关系数据库,LDAP 目录,文件系统或其他类似资源)具有一对一的关联。这样,Realm 接口的实现使用特定于数据源的 API 来发现授权数据(角色,权限等),例如 JDBC,文件 IO,Hibernate 或 JPA 或任何其他数据访问 API。

  • Role
    角色的定义可能会根据您与谁交谈而有所不同。在许多应用程序中,人们充其量用来隐式定义安全策略是一个模糊的概念。 Shiro 倾向于将角色解释为简单的命名权限集合。就这样-聚合一个或多个 Permission 声明的应用程序唯一名称。

这比许多应用程序使用的隐式定义更为具体。如果选择让数据模型反映 Shiro 的假设,则会发现您在控制安全策略方面将拥有更大的权力。

  • Session
    会话是与一段时间内与软件系统进行交互的单个用户/主题关联的有状态数据上下文。当主题使用应用程序时,可以在会话中添加/读取/删除数据,并且以后应用程序可以在必要时使用此数据。当用户/主题退出应用程序或由于不活动而超时时,会话将终止。

对于熟悉 HttpSession 的人来说,Shiro Session可以达到相同的目的,除了 Shiro 会话可以在任何环境中使用,即使没有 Servlet 容器或 EJB 容器也可以使用。

  • Subject
    • Subject *只是花哨的安全性术语,它基本上表示应用程序用户的特定于安全性的“视图”。不过,主题不一定总是需要反映一个人-它可以代表调用您的应用程序的外部进程,也可以代表在一段时间内间歇执行某项任务的守护程序系统帐户(例如 cron 作业)。它基本上是任何正在对应用程序执行操作的实体的表示。

协助处理文档

尽管我们希望该文档对您使用 Apache Shiro 所做的工作有所帮助,但社区一直在不断改进和扩展文档。如果您想为 Shiro 项目提供帮助,请考虑在需要的地方更正,扩展或添加文档。您提供的每一点帮助都会扩大社区,进而改善 Shiro。

贡献文档的最简单方法是将其发送到User Forum用户邮件列表