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

ams*_*ams 159 java security terminology spring-security

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

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

T.R*_*Rob 248

这些是层次的,属,种和个体是等级的.

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

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

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

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

正如评论中所指出的,即使权威人士也不同意这些条款.在准备此回复时,我搜索了NIST,SANS,IEEE,MITER和一些"准权威"来源,例如安全考试指南.我找到的没有一个至少是准权威的单一来源涵盖了所有三个术语,并且在使用方面都有很大差异.这是我对条款内容应该被使用,但是从实际情况来看,当你凝视着在半夜手动,定义往往是任何厂商或作家说,他们是.希望尽管这里的回复将提供足够的洞察力来浏览水域并使用这些术语解析任何安全文档.

  • 能够选择合适的特异性水平.我们可以通过区分目标与队列或主题来获得相同的好处.在分类法中选择不同级别的特异性的能力允许表达的精确性,从而更好地将作者的意图传达给读者.在编程时,我们有奢侈/诅咒,CPU将仅以一种方式解释我们的指令,并且我们被迫使用它的精确度.但在人类语言中,我们需要细微差别和精确度来有效地传达意义. (17认同)
  • 将事情分解为主体,委托人,用户,其额外的复杂性有什么好处我们从这种额外的复杂性中获得了什么好处? (3认同)
  • 考虑两个主体,其中#123 是 John,#124 是指服务帐户。我们可能希望在诸如密码策略、登录能力等方面对待这些不同。“用户”类型的主体受密码复杂性和到期策略的影响,而“服务帐户”类型的主体甚至可能没有密码。当我们开始对主体的类型进行分类时,我们会创建子集。这有帮助吗?还是我只是搅动了更多的泥土? (2认同)

Mar*_*nus 64

看看我的身份验证概念图:

在此输入图像描述

  • 非常酷的图表。但我既没有看到主体,也没有看到主体,也没有看到用户。这意味着,至少需要对该图进行一些注释。 (2认同)
  • 对于那些寻找主题、主体和用户节点的人来说,它们都位于图的底部附近。 (2认同)

Ara*_*ram 16

我认为术语取自JAAS.

当应用程序使用JAAS身份验证对用户(或其他实体(如服务))进行身份验证时,会创建一个Subject作为结果.主题的目的是表示经过身份验证的用户.Subject由一组Principal组成,其中每个Principal代表该用户的身份.例如,主题可以具有名称Principal("Susan Smith")和社会安全号码Principal("987-65-4321"),从而将该主题与其他主题区分开.

  • 这个词典比JAAS早一点.JAAS只是重复使用其中的一部分,有时以非标准方式重复使用.引发这个问题的部分问题是,这些概念是从使用术语的上下文中学习的,然后以稍微不同的方式重用.当权威来源难以找到或被忽略时,其意义随着时间的推移而变化.对于安全性而言,精度是绝对必要条件,这种模糊性的偏差会降低我们构建和实施安全设计的能力. (3认同)
  • 我以前看过这个定义,它太密集了,你能详细说明一下,尤其是用户与主体的不同之处,为什么使用术语主题而不仅仅是用户.如果这些术语具有超出JAAS的意义,我非常希望熟悉这个含义,如果这些术语是JAAS的发明,那么我想创建它的太阳工程师选择了这些概念意味着什么的不好的名字.我问过不少程序员这个问题并且无法得到明确的答案,每个人似乎都对这些术语有不同的理解. (2认同)

rah*_*han 11

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

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

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

  • 我可以想到两个好处:(1)考虑用户Alice与主体UserId("Alice"),角色("Manager"),Department("Sales")访问服务(Object).然后可以将服务访问控制指定为"允许角色(管理员)"或"禁止部门(销售)"等,而不是指定Alice是否可以访问它.这种访问控制系统更易于管理,因为安全管理员无需为所有服务指定所有用户的访问权限. (6认同)
  • (2)在企业系统中,在执行某些组合服务之前,用户通常必须使用多个系统进行身份验证.可能会发生这些系统中的每一个都有自己的访问控制机制需要不同的细节 - 一个系统使用SSN,另一个系统使用userId.因此,同一主体应该拥有两者的原则 (4认同)

Raf*_*ael 10

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

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

希望能帮助到你.


fgu*_*gul 6

这是Oracle JAVA SE文档中以下说明的链接

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

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

身份验证之后,将在主题中填充关联的身份或主体(类型为java.security.Principal)。一个主题可能有很多校长。例如,一个人可能有一个名字校长(“ John Doe”)和一个SSN校长(“ 123-45-6789”),这与其他主题有所区别。

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