主题,用户和委托人之间的含义和区别是什么?

时间:2011-02-14 05:22:18

标签: java spring-security terminology security

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

那么,这些术语究竟是什么意思,为什么需要主题主体的这些区别?

7 个答案:

答案 0 :(得分:235)

这些是层次结构,即属,种和个体是等级的。

  • 主题 - 在安全上下文中,主题是请求访问对象的任何实体。这些是用于表示请求访问的事物以及请求所针对的事物的通用术语。登录到应用程序时,您是主题,应用程序是对象。当有人敲门时,访客是请求访问的主体,而您的家是请求访问的对象。
  • 校长 - 主题的子集,由帐户,角色或其他唯一标识符表示。当我们达到实现细节的级别时,主体是我们在访问控制列表中使用的唯一键。它们可能代表人类用户,自动化,应用程序,连接等。
  • 用户 - 主体的子集,通常指人工操作员。区别在于随着时间的推移而变得模糊,因为词语“用户”或“用户ID”通常与“帐户”互换。但是,当您需要区分主体的广泛类别和作为以非确定性方式驱动交易的交互式运营商的子集时,“用户”是正确的词

主题/对象继承自语法中使用的相同术语。在一个句子中,主语是演员,而对象是作用的东西。从这个意义上来说,在计算机发明之前就一直存在使用。在安全上下文中,主题是可以发出请求的任何内容。如上所述,这不必限于IT安全性,因此是非常广泛的分类。有趣的是,主体意味着对象。没有对象,就没有主题。

校长是学科解决的问题。当您出示信用卡时,您就是主题,而帐号是本金。在其他情况下,您的用户ID或州颁发的身份证明是您的主要身份。但是校长可以与许多不是人的学科相关联。当应用程序发出对系统级函数的请求时,委托人可以是签名的可执行代码模块的签名者,但即使在这种情况下,驱动请求的用户仍然是主题。

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

如评论中所述,即使是权威人士也不同意这些条款。在准备此回复时,我搜索了NIST,SANS,IEEE,MITER和一些“准权威”来源,例如安全考试指南。我找到的没有一个至少是准权威的单一来源涵盖了所有三个术语,并且在使用方面都有很大差异。这是我对如何使用 这些术语的看法,但从实际的角度来看,当你在半夜仔细阅读手册时,定义往往是供应商或作者所说的任何内容。是。希望尽管这里的回复将提供足够的洞察力来导航水域并使用这些术语解析任何安全文档。

答案 1 :(得分:59)

答案 2 :(得分:15)

我认为术语取自JAAS

  

当应用程序使用JAAS时   验证身份验证   用户(或其他实体,如   服务),主题被创建为   结果。主题的目的是   表示经过身份验证的用户。 :一种   主题由一组组成   校长,每个校长   表示该用户的身份。   例如,一个主题可以有一个   名校长(“苏珊史密斯”)和一名   社会保障号码校长   (“987-65-4321”),由此   将此主题与其他主题区分开来   受试者。

答案 3 :(得分:10)

主题是请求服务的实体。它可以是用户或进程。可能这就是选择主题而不是用户的原因。

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

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

答案 4 :(得分:10)

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

“主题可能具有多个身份。每个身份在主题中表示为主体。主体只是将名称绑定到主题。例如,恰好是一个人的主体,Alice,可能有两个主体:一个它将驾驶执照上的名字“爱丽丝酒吧”绑定到主题,另一个将学生证上的号码“999-99-9999”绑定到主题。两位校长都指同一主题即使每个人都有不同的名字。“

希望它有所帮助。

答案 5 :(得分:4)

这是Oracle JAVA SE文档中以下解释的link

  

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

     

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

     

经过身份验证后,主题会填充相关的身份或主体(类型为java.security.Principal)。主题可能有很多校长。例如,一个人可能有一个名字为Principal(" John Doe")和一个SSN Principal(" 123-45-6789"),它将其与其他Subjects区分开来。

     

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

答案 6 :(得分:0)

根据rahulmohan的观点,我认为,在Authentication是主条目之前,在Authentication是主条目之后, 在不同的意义上,子喷气机可能有很多主要