Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 主体、使用者和委托人之间的含义和区别是什么?_Java_Spring Security_Terminology_Security - Fatal编程技术网

Java 主体、使用者和委托人之间的含义和区别是什么?

Java 主体、使用者和委托人之间的含义和区别是什么?,java,spring-security,terminology,security,Java,Spring Security,Terminology,Security,在安全框架的上下文中,一些术语通常出现在主题、用户和主体,我无法找到它们之间的明确定义和区别 那么,这些术语的确切含义是什么?为什么需要区分主语和主语 当应用程序使用JAAS时 验证以验证 用户(或其他实体,例如 服务),将主题创建为 结果。本主题的目的是 表示经过身份验证的用户A 主题由一组 主体,其中每个主体 表示该用户的标识。 例如,一个主题可以有一个 姓名校长(“苏珊·史密斯”)和 社会保险号码负责人 (“987-65-4321”),因此 区分这个主题和其他主题 科目 主题是请求服务的实

在安全框架的上下文中,一些术语通常出现在主题用户主体,我无法找到它们之间的明确定义和区别


那么,这些术语的确切含义是什么?为什么需要区分主语主语

当应用程序使用JAAS时 验证以验证 用户(或其他实体,例如 服务),将主题创建为 结果。本主题的目的是 表示经过身份验证的用户A 主题由一组 主体,其中每个主体 表示该用户的标识。 例如,一个主题可以有一个 姓名校长(“苏珊·史密斯”)和 社会保险号码负责人 (“987-65-4321”),因此 区分这个主题和其他主题 科目


主题是请求服务的实体。它可以是用户或进程。可能这就是为什么选择名称Subject而不是user

当主体试图访问服务时,必须首先对该主体进行身份验证。成功的身份验证以加载该主题的安全主体结束。例如,在基于角色的访问控制系统中,经过身份验证(登录)的用户通常有两个主体-userId和roleId。在这种系统中,为角色和用户指定了特权(即谁可以访问什么)。在授权期间(即检查是否应允许请求的服务),安全系统将检查两个主体的可访问性


因此,从授权的角度来看,主体是允许或不允许访问的实际实体。Subject只是一个包含一些主体的用户/线程/进程

这些是分层的,就像属、种和个体是分层的一样

  • 主题在安全上下文中,主题是请求访问对象的任何实体。这些通用术语用于表示请求访问的对象和请求所针对的对象。当您登录到应用程序时,您是主体,而应用程序是对象。当有人敲门时,访客是请求访问的主体,而您的家是请求访问的对象
  • 主体-由帐户、角色或其他唯一标识符表示的主体子集。当我们到达实现细节的级别时,主体是我们在访问控制列表中使用的唯一键。它们可能代表人工用户、自动化、应用程序、连接等
  • 用户-主体的子集,通常指人工操作员。随着时间的推移,“用户”或“用户ID”这两个词通常与“帐户”互换,因此两者之间的区别越来越模糊。然而,当您需要区分作为主体的广泛类别和作为以非确定性方式驱动事务的交互操作符的子集时,“用户”是正确的词
主语/宾语继承自语法中使用的相同术语。在一个句子中,主语是行动者,宾语是被作用的事物。从这个意义上讲,这种用法在计算机发明之前就已经存在了。在安全上下文中,主题是可以发出请求的任何东西。如上所述,这不需要局限于IT安全,因此是一个非常广泛的分类。有趣的是,主语意味着宾语。没有客体,就没有主体

校长是受试者下定决心要做的事。当你出示信用卡时,你是主体,账号是主体。在其他情况下,您的用户ID或国家颁发的标识是您的主体。但校长可以与许多非人的学科类型相关联。当应用程序请求系统级功能时,主体可能是已签名可执行代码模块的签名者,但即使在这种情况下,驱动请求的用户仍然是主体

用户比主体或主体更具体,因为它通常指的是交互操作员。这就是为什么我们有一个图形用户界面,而不是图形主体界面。用户是解析为主体的subject实例。单个用户可以解析为任意数量的主体,但任何主体都应该解析为单个用户(假设人们遵守不共享ID的要求)。在上面的示例中,可执行代码模块的签名者肯定不是用户,但它是有效的主体。试图加载模块的交互式操作员是用户

如评论所述,即使是权威人士也不同意这些条款。我搜索了NIST、SANS、IEEE、MITRE和一些“准权威”来源,如安全考试指南,同时准备了这份回复。我发现,没有一个来源至少是准权威的,涵盖了所有三个术语,并且它们的用法都有显著差异。这是我对术语应该如何使用的看法,但是从实用的角度来看,当你在半夜钻研手册时,定义往往是供应商或作家所说的。希望这里的回复能够提供足够的洞察力,以便使用这些术语导航和解析任何安全文档。

请查看我的:


正如T.Rob所解释的,Subject是请求访问对象的任何实体。从这一点开始,我在javax.security.auth.Subject代码上找到了一条注释,我发现它非常有用且易于理解:

“受试者可能具有多个身份。每个身份都是