主体、使用者和主体之间的意义和区别是什么?

在安全框架的上下文中,经常会出现一些术语主题用户主要,我还没有找到它们之间的明确定义和区别。

那么,这些术语到底是什么意思,为什么需要主题主要的这些区别呢?

56873 次浏览

我认为这个术语来自JAAS

当应用程序使用JAAS时 验证以验证 用户(或其他实体,如 service), 主题被创建为 结果。本课题的目的是 表示已验证的用户。< >强 主体是由一组 Principals,其中每个Principal 表示该用户的标识。 例如,一个Subject可以有一个 姓名为校长(“苏珊·史密斯”) 社会保险号 (“987 - 65 - 4321“),从而 将这门学科与其他学科区别开来 科目。< / p >

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

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

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

它们是有等级的,就像属,种和个体有等级一样。

  • 主题 -在安全上下文中,主题是请求访问对象的任何实体。这些是通用术语,用于表示请求访问的对象和提出请求的对象。当您登录到一个应用程序时,您是主体,应用程序是对象。当有人敲你的门时,访客是请求进入的主体,你的家是被请求进入的对象。
  • 主要 -由帐户、角色或其他唯一标识符表示的主题的子集。当我们谈到实现细节时,主体是我们在访问控制列表中使用的唯一键。它们可以代表人类用户、自动化、应用程序、连接等。
  • 用户 - 主要的子集,通常指人工操作符。随着时间的推移,这种区别越来越模糊,因为“用户”或“用户ID”通常与“帐户”互换。然而,当你需要区分校长的广义类和它们的子集,它们是以不确定的方式驱动事务的交互操作符时,“user”是正确的词。

Subject/Object继承了语法中使用的相同术语。在句子中,主语是施动者,客体是被施动的事物。从这个意义上说,在计算机发明之前,这种用法就已经存在了。在安全上下文中,主题是可以发出请求的任何东西。如上所述,这并不局限于IT安全,因此是一个非常广泛的分类。有趣的是,主语隐含着宾语。没有客体,就没有主体。

主体是主体决心要达到的目标。当你出示你的信用卡时,你是主体,账号是本金。在其他情况下,您的用户ID或国家颁发的标识是您的主体。但主体可以与许多类型的主体联系在一起,而不是人。当应用程序对系统级功能发出请求时,主体可以是已签名的可执行代码模块的签名者,但即使在这种情况下,驱动请求的用户仍然是主体。

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

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

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

“受试者可能有多重身份。每个身份都表示为主体中的主体。主体只是将名称绑定到Subject。例如,一个主体恰好是一个人,Alice,可能有两个主体:一个将“Alice Bar”(她驾照上的名字)绑定到主体,另一个将“999-999-9999”(她学生证上的号码)绑定到主体。两个主体指的是同一个主体,尽管各自有不同的名称。”

希望能有所帮助。

这是下面从Oracle JAVA SE文档解释的链接

主题,主体,身份验证和凭证 要授权对资源的访问,应用程序首先需要验证请求的来源。JAAS框架定义了术语主题来表示请求的源。主体可以是任何实体,如个人或服务。主题由javax.security.auth.Subject类表示

身份验证表示验证主体身份的过程,必须以安全的方式执行;否则,攻击者可能会冒充他人来访问系统。认证通常涉及主体展示某种形式的证据来证明其身份。这些证据可能是只有主体可能知道或拥有的信息(例如密码或指纹),也可能是只有主体可以产生的信息(例如使用私钥的签名数据)。

经过身份验证后,Subject将填充相关的标识,或校长(类型为java.security.Principal)。一个主体可以有多个主体。例如,一个人可能有一个名字Principal(“John Doe”)和一个SSN Principal(“123-45-6789”),这将其与其他subject区别开来。

除了相关的principal之外,Subject还可以拥有与安全相关的属性,这些属性称为凭证。凭据可能包含用于向新服务验证主体的信息。此类凭证包括密码、Kerberos票据和公钥证书。凭证还可能包含允许主体执行某些活动的数据。例如,加密密钥表示使主体能够签署或加密数据的凭证。公共和私有凭据类不是核心J2SE API的一部分。因此,任何类都可以表示一个凭据。

根据rahulmohan,我认为,在认证之前是主体,在认证之后是主体, 在不同情况下,一个主体可以有多个主体