安全上下文中的主体与用户与主体的含义是什么?
在安全框架的背景下,一些术语通常会出现主体 , 用户和主体 ,我无法find明确的定义和差异。
那么,这些术语究竟意味着什么,为什么需要这些主体和主体的区别呢?
这些是等级的,属,物种和个人是分层次的。
- 主体 – 在安全上下文中, 主体是请求访问对象的任何实体。 这些是通用术语,用来表示请求访问的东西以及请求所针对的东西。 当你login到应用程序时,你是主题,应用程序是对象。 当有人敲你的门,访问者是请求访问的主题,你的家是访问被请求的对象。
- Principal(主体) – 由帐户,angular色或其他唯一标识符表示的主题的子集。 当我们达到实现细节的级别时,委托人是我们在访问控制列表中使用的唯一键。 他们可能代表人类用户,自动化,应用程序,连接等。
- 用户 – 通常指人操作员的主体的子集。 由于“用户”或“用户ID”通常与“帐户”互换,所以区分正在逐渐模糊。 但是,当你需要区分作为主体的广义事物和作为以非确定性方式推动交易的交互式操作员的子集时,“用户”是正确的词。
主体/对象从语法中使用的相同术语inheritance而来。 在一个句子中,主体是主体,主体是对象。 从这个意义上说,电脑被发明之前就已经存在了。 在安全上下文中,一个主题是任何可以提出请求的东西。 如上所述,这不必限于IT安全性,因此是非常广泛的分类。 有趣的是这个主题意味着对象。 没有一个客体,就没有主体。
校长是什么主题解决。 当你出示你的信用卡时,你是主题,帐号是主体。 在其他情况下,您的用户标识或州政府颁发的标识是您的委托人。 但是,校长可以与许多不属于人的主体相关联。 当应用程序提出系统级function请求时,委托人可以是已签名的可执行代码模块的签名者,但即使在这种情况下,驱动请求的用户仍然是主体。
用户比主体或主体更具体,因为它通常是指交互式操作员。 这就是为什么我们有一个graphics用户界面,而不是一个graphics的主要接口。 用户是parsing为委托人的主体的实例。 单个用户可以解决任意数量的委托人,但是任何委托人都有望解决给单个用户(假设人们遵守不要求共享ID的要求)。 在上面的例子中,可执行代码模块的签名者绝对不是用户,但它是一个有效的主体。 试图加载模块的交互式操作员是用户。
正如评论中指出的那样,即使权威人士也不同意这些条款。 我在searchNIST,SANS,IEEE,MITRE和几个“准权威”来源,例如安全考试指南。 我发现没有哪个来源至less是准权威性的,涵盖了所有三个术语,并且在使用方面都有很大不同。 这是我应该如何使用这些术语,但是从实际的angular度来看,当你在深夜阅读手册时,定义往往是供应商或作者所说的。 希望尽pipe这里的回应将提供足够的洞察力来浏览水域,并使用这些术语parsing任何安全文档。
看看我的身份validation概念图 :
我认为这个术语来自JAAS 。
当应用程序使用JAAS身份validation来validation用户(或其他实体,如服务)时,将创build一个Subject作为结果。 主题的目的是表示已authentication的用户。 主体由一组主体组成 ,其中每个主体代表该用户的身份。 例如,一个主体可以有一个名字主要(“苏珊史密斯”)和一个社会安全号码校长(“987-65-4321”),从而区分这个主题与其他主题。
主体是请求服务的实体。 它可以是用户或进程。 可能这就是为什么select了主题名称而不是用户。
当一个主题试图访问一个服务时,主题必须先被authentication。 成功的身份validation在加载该主题的安全主体后结束。 例如,在基于angular色的访问控制系统中,经过身份validation(login)的用户通常具有两个主体 – userId和roleId。 在这样的系统中,权限(即谁可以访问什么)是为angular色和用户指定的。 在授权期间(即检查是否应该允许请求的服务),安全系统将检查对两个委托人的可访问性。
因此,从授权的angular度来看,委托人是允许或不允许访问的实体。 主体只是一个拥有一些主体的用户/线程/进程。
正如T.Rob所解释的,Subject是任何请求访问对象的实体。 从这一点开始,我发现了一个对javax.security.auth.Subject代码的评论,我发现它非常有用和易于理解:
“主体可能具有多重身份,每个身份在主体中都被表示为一个主体,主体只是简单地将主体与主体绑定在一起,例如,一个碰巧是一个人的主体Alice可能有两个主体:一个主体绑定”她的驾驶执照上的名字“Alice Alice”,以及另外一个将“学生证”上的号码“999-99-9999”绑定到主题上。有一个不同的名字。“
希望能帮助到你。
这是从Oracle JAVA SE文档中解释下面的链接 。
主体,委托人,authentication和凭证为了授权访问资源,应用程序首先需要authentication请求的来源。 JAAS框架将术语主题定义为表示请求的来源。 主题可以是任何实体,例如个人或服务。 主题由javax.security.auth.Subject类表示。
authentication代表validation主体身份的过程,必须以安全的方式进行; 否则肇事者可能冒充他人进入系统。 authentication通常涉及certificate某种forms的证据来certificate其身份。 这样的证据可能只是主体可能知道或有的信息(如密码或指纹),也可能只是主体可能产生的信息(如使用私钥签名的数据)。
一旦通过身份validation,主题将被填充关联的身份或Principals (types为java.security.Principal )。 一个主题可能有很多校长。 例如,一个人可能有一个名称为Principal(“John Doe”)和一个SSN Principal(“123-45-6789”),与其他主题区分开来。
除了关联的Principals之外,Subject还可以拥有与安全有关的属性,这些属性被称为凭证 。 证书可能包含用于validation主题到新服务的信息。 这些凭据包括密码,Kerberos票据和公钥证书。 证书还可能包含使主题执行某些活动的数据。 例如,encryption密钥代表使主体能够签署或encryption数据的证书。 公共和私人凭证类不是核心J2SE API的一部分。 因此,任何class级都可以代表一个凭证。